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

Sno*_*ugg 3 java getter setter groovy 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);
}
Run Code Online (Sandbox Code Playgroud)

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

public class Cat implements Animal { // Groovy class
    public String name;
    public Integer age;
}
Run Code Online (Sandbox Code Playgroud)

jal*_*aba 6

您可以使用groovy 属性执行此操作,但请考虑字段和属性之间的差异:

甲字段是一个类或一个性状,其中的成员:

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

[...]

一个属性是一个私有字段和getter/setter方法的组合.您可以使用以下内容定义属性:

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

然后Groovy将适当地生成getter/setter.

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