dea*_*mon 9 java refactoring properties getter-setter playframework
在玩游戏!框架在运行时为模型类的每个公共字段生成getter和setter.
public class Product {
public String name;
public Integer price;
}
Run Code Online (Sandbox Code Playgroud)
将转变为
public class Product {
public String name;
public Integer price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
Run Code Online (Sandbox Code Playgroud)
该手册进一步解释:
然后,当您想要访问某个属性时,您只需编写:
product.name = "My product";
product.price = 58;
Run Code Online (Sandbox Code Playgroud)
在加载时将其翻译为:
product.setName("My product");
product.setPrice(58);
Run Code Online (Sandbox Code Playgroud)
...并警告:
如果依赖于自动生成,则无法直接使用getter和setter方法来访问属性.这些方法是在运行时生成的.因此,如果您在编写的代码中引用它们,编译器将找不到方法并将生成错误.
因为我不能在Play之外使用这些getter和setter!项目,我认为生成它们没有任何好处.与考虑到的所有现代IDE的公共字段,重构(封装字段和更改调用者)相比,有什么好处?
简短的回答:豆需要它们.
更长:Beans规范要求(除其他外)每个内部字段的getter/setter.我不是100%肯定,但我认为Hibernate和Groovy模板都需要Java Bean(POJO Beans,而不是Java EE!),因此他们会要求getter/setter.游戏只是节省您的时间这样做,所以你不要有锅炉板代码担心(除非你要定义出于某种原因,你可以做你自己的getter/setter).
另一个原因是,虽然您不必指定设置者和吸气剂,但您仍然可以!
所以,如果你有(根据你的例子)
product.name = "my product"
Run Code Online (Sandbox Code Playgroud)
这很好,并使您的代码更快,在我看来更容易阅读.然而,有一个很好的理由用于封装的setter和getter.如果你想在更改product.name时添加一些逻辑,你可以指定自己的setter,但不必更改上面的代码,因为它将继续在幕后调用setter.
因此,这为您提供了良好封装的灵活性和强大功能,但直接现场访问的整洁性和可读性.
我认为这是两个世界中最好的.