我可以使用 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 不是那里。
我正在从导入的库中扩展一个非常简单的 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 不是那里。