Groovy的JavaBean
来源:互联网 发布:java前后端分离 vue 编辑:程序博客网 时间:2024/06/05 03:18
JaveBean
以下是java中构建一个javaBean的代码:
public class Car { public int miles; private final int year; public int getMiles() { return miles; } public int getYear() { return year; } public void setMiles(int miles) { this.miles = miles; } public Car(int theYear){ year = theYear; } public static void main(String[] args){ Car car = new Car(2008); System.out.println("Year:" + car.getYear()); System.out.println("Miles:" + car.getMiles()); System.out.println("Setting miles"); car.setMiles(25); System.out.println("Miles:" + car.getMiles()); }}
运行结果为:
Year:2008
Miles:0
Setting miles
Miles:25
用Groovy写,则可以省略很多代码
class Car { def miles = 0 final year Car(theYear){ year = theYear }}Car car = new Car(2008)println "Year: $car.year"println "Miles: $car.miles"println "Setting miles"car.miles = 25println "Miles: $car.miles"
运行结果:
Year: 2008
Miles: 0
Setting miles
Miles: 25
def在这个上下文中声明了一个属性,我们可以用def声明属性,也可以用int miles或者int miles=0这样给出类型。Groovy会在背后默默为期创建一个访问器和一个更改器。当代码中调用miles时候,其实并非引用一个字段,而是调用该属性的访问器。要把属性设置为只读,需要使用final来声明该属,这和java一样。在这种情况下,Groovy会为该属性提供一个访问器,但不提供更改器。修改final字段的任何尝试都会导致异常。可以根据需要向声明中加入类型信息。可以把字段标记为private,但是Groovy并不会遵守这一点。因此,如果想把变量设置为私有的,必须实现一个拒绝任何修改的更改器。可以通过下面的代码验证这一概念。
class Car { private miles = 0 final year Car(theYear){ year = theYear } def getMiles(){ println "getMiles called" miles } private void setMiles(miles){ throw new IllegalAccessException("you're not allowed to change miles") } def drive(dist){ if(dist>0){ miles += dist } }}def car = new Car(2012)println "Year: $car.year"println "Miles: $car.miles"println "Driving"car.drive(10)println "Miles: $car.miles"try{ print "Can I set the year?" car.year = 1900}catch (ReadOnlyPropertyException ex){ println ex.message}try{ println "Can I set the miles?" car.miles = 12}catch (IllegalAccessException ex){ println ex.message}
这里使用final声明了year,使用private声明了miles。在drive()实例方法中,无法修改year,但是可以修改miles。miles的更改器不允许在类的外部对该属性的值进行任何修改
输出的结果为:
Year: 2012
getMiles called
Miles: 0
Driving
getMiles called
Miles: 10
Can I set the year?Cannot set readonly property: year for class: groovy.Car
Can I set the miles?
you’re not allowed to change miles
从结果可以看出,我们能够读取两个属性的值,但是不能设置其中任何一个
想要存取属性,再也不需要在调用中使用访问器和更改器了。下面代码说明了其优雅:
Calendar.instance//代替Calendar.getInstance()str = 'hello'println str.class.name//代替str.getClass().getName()//注意:不能用于Map,Builder等类型//为保险起见,请使用str.getClass().name
- Groovy的JavaBean
- 2.2Groovy中的JavaBean
- Groovy:简单的介绍Groovy
- 【Groovy手札】Groovy的字符串
- 【Groovy手札】Groovy的List
- 实战 Groovy: Groovy:Java 程序员的 DSL
- 实战 Groovy: Groovy:Java 程序员的 DSL
- 【Groovy手札】Groovy的几种注释
- 很诡异的Groovy
- groovy 的陷阱
- Groovy的一些Map
- Groovy 的腾飞
- Groovy的Loop
- Groovy的IDE
- Groovy的基础语法
- Groovy的闭包
- Groovy的集合类型
- Groovy的资源处理
- DC-4: 循环结构
- CSS基础知识一
- POJ 3159 Candies 笔记
- 离散傅里叶变换
- 51nod 1453 抽彩球 (思维+排列组合)
- Groovy的JavaBean
- java 多态
- 5-15 计算圆周率 (15分)
- Linux学习高级篇(二)
- LeetCode 80. Remove Duplicates from Sorted Array II
- maven项目编译后在classes文件夹下没有编译出mybatis的xml文件的解决方案
- 队列和栈(1)
- iOS 分析iOS设备导出的崩溃信息
- JSP笔记