我们都熟悉Java的“getter& setter”方法。它们是创建数据封装的好方法;确保只能通过这些特定方法访问类代码之外的任何私有字段。然后,这些方法可以包括检查,开销,同步等。
public class Person(){
private String name;
private int birthYear;
// traditional getter/setter syntax
public String getName(){ return name; }
public int getBirthYear(){ return birthYear; }
public void setName(String name){ this.name = name; }
public void setBirthYear(int birthYear){ this.birthYear = birthYear; }
// proposed overloading getter/setter syntax
public String name(){ return name; }
public int birthYear(){ return birthYear; }
public void name(String name){ this.name = name; }
public void birthYear(int birthYear){ this.birthYear = birthYear; }
}
我的问题是,使用方法重载是否有任何问题,以获得getter / setter的“建议”语法?对我而言,它似乎更具可读性和直观性:
Person p = new Person();
p.name("Bob");
System.out.println(p.name());
我能想到的最大的缺点是每个人都习惯了get / set语法,这会让事情变得不那么容易理解。无论如何,这不是一个重大问题,我不介意使用getter / setter,但我只想到了这种看起来更漂亮的替代方式,并想知道其他人的想法?
由于
答案 0 :(得分:3)
是。虽然" get"和"设置"仅仅是一种约定 - 它们对于Java bean来说是绝对必要的,它们可以正常地与反射一起工作。
您可以阅读有关BeanINfo或class Introspector
的更多信息答案 1 :(得分:1)
FoggyDay的回答是正确的。许多库和工具都依赖于get / set / is属性命名约定。
但是,Groovy是一种基于JVM的脚本语言,它提供了一些您正在寻找的语法糖:
class Person {
String name
int birthYear
}
像这样编译成Java:
public class Person {
private String name;
private int birthYear;
public String getName(){ return name; }
public int getBirthYear(){ return birthYear; }
public void setName(String name){ this.name = name; }
public void setBirthYear(int birthYear){ this.birthYear = birthYear; }
}
请点击此处了解详情:http://groovy.codehaus.org/Groovy+Beans
答案 2 :(得分:0)
对于流行的注释库 lombok 的用户,可以通过在通常位于 src/main/java 下的 lombok.config
文件中设置以下属性来轻松配置。它确保访问器方法没有以 get、set 或 is 为前缀。
lombok.accessors.fluent = true
给定的类编译成这个。请注意允许函数链接的 setter 的返回类型。
@Getter
@Setter
public class Person {
private String name;
private int birthYear;
public String name() { return name; }
public int birthYear() { return birthYear; }
public Person name(String name) { this.name = name; return this; }
public Person birthYear(int birthYear) { this.birthYear = birthYear; return this; }
}