我可以使用groovy的默认getter / setter来帮助实现java接口吗?

时间:2015-10-13 15:49:17

标签: java groovy setter getter getter-setter

我正在从导入的库中扩展一个非常简单的Java接口。界面非常简单,它声明的唯一方法是属性列表的getter和setter。

我的应用程序是用Groovy编写的,所以我想用Groovy类实现这个Java接口。

我的印象是Groovy默认为其任何类的属性创建了getter和setter - 我可以使用这些默认的getter和setter来满足Java接口的要求吗?

Library的Java接口:

public interface Animal {  // java interface
    public String getName();
    public void setName(String name);
    public Integer getAge();
    public void setAge(Integer age);
}

我希望我能用Groovy实现它(但我的编译器抱怨缺少setter):

public class Cat implements Animal { // Groovy class
    public String name;
    public Integer age;
}

1 个答案:

答案 0 :(得分:6)

你可以使用groovy 属性来做到这一点,但要考虑 fields and properties 之间的区别:

  

字段是类或特征的成员:

     
      
  • 强制访问修饰符(公共,受保护或私有)
  •   
  • 一个或多个可选修饰符(静态,最终,同步)
  •   
  • 可选类型
  •   
  • 强制名称
  •   

[...]

  

属性是私有字段和getter / setter的组合。   您可以使用以下命令定义属性:

     
      
  • 缺席访问修饰符(无公开,受保护或最终)
  •   
  • 一个或多个可选修饰符(静态,最终,同步)
  •   
  • 可选类型
  •   
  • 强制名称
  •   
     

Groovy将适当地生成getter / setter。

当您放置显式访问修饰符时,实际上是在使用字段,因此不会生成getter / setter,这就是编译器抱怨Can't have an abstract method in a non-abstract class的原因,因为getter / setter不存在。