我现在已经实现了一些Java应用程序,到目前为止仅实现了桌面应用程序。我更喜欢使用不可变对象在应用程序中传递数据,而不是使用带有变量(setter和getter)的对象,也称为JavaBeans。
但是在Java世界中,使用JavaBeans似乎更为常见,而且我不明白为什么应该使用JavaBeans。就个人而言,如果代码仅处理不可变的对象而不是始终改变状态,则代码看起来会更好。
在项目15:最小化可变性,有效的Java 2ed中,还建议使用不可变的对象。
如果我有一个Person
实现为JavaBean的对象,它将看起来像:
public class Person {
private String name;
private Place birthPlace;
public Person() {}
public setName(String name) {
this.name = name;
}
public setBirthPlace(Place birthPlace) {
this.birthPlace = birthPlace;
}
public String getName() {
return name;
}
public Place getBirthPlace() {
return birthPlace;
}
}
并Person
实现为不可变对象:
public class Person {
private final String name;
private final Place birthPlace;
public Person(String name, Place birthPlace) {
this.name = name;
this.birthPlace = birthPlace;
}
public String getName() {
return name;
}
public Place getBirthPlace() {
return birthPlace;
}
}
或更接近struct
C:
public class Person {
public final String name;
public final Place birthPlace;
public Person(String name, Place birthPlace) {
this.name = name;
this.birthPlace = birthPlace;
}
}
我还可以在不可变对象中使用吸气剂来隐藏实现细节。但是由于我只将它用作一个,struct
所以我倾向于跳过“获取器”,并使其保持简单。
简而言之,我不明白为什么使用JavaBeans更好,还是我可以并且应该继续使用我不变的POJO?
许多Java库似乎对JavaBeans都有更好的支持,但是随着时间的推移,对不可变POJO的更多支持可能会越来越流行?