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

Can I use groovy's default getters / setters to help implement a java interface?

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

我的应用程序是用 Groovy 编写的,所以我想用 Groovy class.

实现这个 Java 接口

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

图书馆的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;
}

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

A field is a member of a class or a trait which:

  • a mandatory access modifier (public, protected, or private)
  • one or more optional modifiers (static, final, synchronized)
  • an optional type
  • a mandatory name

[...]

A property is a combination of a private field and getters/setters. You can define a property with:

  • an absent access modifier (no public, protected or final)
  • one or more optional modifiers (static, final, synchronized)
  • an optional type
  • a mandatory name

Groovy will then generate the getters/setters appropriately.

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