2014-07-26 30 views
0

我们都熟悉Java的“getter & setter”方法。它们是创建数据封装的好方法;确保只有通过这些特定方法才能访问类代码之外的任何私有字段。然后,这些方法可包括检查,开销,同步等get和set方法的替代样式

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语法,这会让事情的可读性。无论如何,这不是一个大问题,我不介意使用getters/setters,但我只是想到了这种替代方式,看起来更漂亮,想知道别人怎么看?

谢谢

回答

3

是的。虽然“get”和“set”仅仅是一个约定 - 但它们对于Java bean正确地使用反射来说是绝对必要的。

你可以找到更多念叨BeanINfo或约class Introspector

+0

虽然我了解Java Bean和自我反省,但我还没有真正应用它们。尽管如此,我现在仍然认为,如果你已经提出了一些重要的依赖关系(我相信还有更多),偏离get/set约定是一个坏主意。谢谢回复。 – javauser

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