Groovy Tip 8 GroovyBean

                               Groovy Tip 8 GroovyBean
 
 
做这个主题的时候,我曾想了好些天,要不要做这个主题。因为Groovy Bean对于使用Groovy语言的开发者来说再熟悉不过,说不定每天都在用它。犹豫了好多天,才决定把它写下来。因为我也使用Groovy Bean很久了,但很多概念也是慢慢搞清楚的,在写代码的时候走了一些弯路。
肯定很多使用了Groovy语言的开发者写过类似于这样的代码:
class Person
{
        String name
        int age
        String addr
   
}
 
也肯定这样使用过:
Person person = new Person()
      
       person.name = 'Tom'
    ……
 
很多初次接触 Groovy 语言的人都以为 Groovy Bean 的属性是公开的,可以直接访问。这其实是一个误解。上面的 Person 类其实相当于如下的 Java 类:
public class Person {
   
    private String name ;
   
    private int age ;
   
    private String addr ;
 
    public String getAddr() {
       return addr ;
    }
 
    public void setAddr(String addr) {
       this . addr = addr;
    }
 
    public int getAge() {
       return age ;
    }
 
    public void setAge( int age) {
       this . age = age;
    }
 
    public String getName() {
       return name ;
    }
 
    public void setName(String name) {
       this . name = name;
    }
 
}
 
因此,上面的 person.name = 'Tom'语句其实相当于Java语言中的:
person.setName(“Tom”);
 
而println person.name语句相当于Java语言中的:
person.getName();
 
同样,Groovy语言还有一个一个规则, 如果你声明一个属性为“ private ”、“ public ”或“ protected ”,那么你只是声明了一个属性,这意味着你要自己写属性的“ set ”和“ get ”方法。
Groovy语言对Java语言的Javabean的更外一个简化就是你不需要给Groovy Bean编写一个构造器,就可以使用构造器。如:
       Person person = new Person(name: 'Tom' )
      
    println person.name
 
当然,你也可以一口气把 Person 类的属性全部赋值:
       Person person = new Person(name: 'Tom' ,age: 22 ,addr: 'Shenzhen' )
 
    println "${person.name} lived in ${person.addr}"
 
打印结果为:
Tom lived in Shenzhen
 
当你把一个属性声明成 final 的时候,就不能再给该属性赋值了。如:
class Person {
   
    String name
    final int age = 22
    String addr
 
}
 
它相当于 Java 的:
public class Person {
   
    private String name ;
   
    private final int age = 22;
   
    private String addr ;
 
    public String getAddr() {
       return addr ;
    }
 
    public void setAddr(String addr) {
       this . addr = addr;
    }
 
    public int getAge() {
       return age ;
    }
 
    public String getName() {
       return name ;
    }
 
    public void setName(String name) {
       this . name = name;
    }
 
}
 
注意,只有 getAge ()方法,没有 set 方法。
如果你对上面的 Groovy Bean 进行如下访问:
       Person person = new Person(name: 'Tom' ,age: 22 ,addr: 'Shenzhen' )
 
    println "${person.name} lived in ${person.addr}"
 
就会抛出如下的Exception:
Exception in thread "main" groovy.lang.ReadOnlyPropertyException : Cannot set readonly property: age for class: Person
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值