为什么我不应该使用不可变的POJO而不是JavaBeans?
2022-08-31 12:36:37
我现在已经实现了一些Java应用程序,到目前为止只有桌面应用程序。我更喜欢使用不可变对象在应用程序中传递数据,而不是使用具有赋值器(setters和getters)的对象,也称为JavaBeans。
但是在Java世界中,使用JavaBeans似乎更为常见,我不明白为什么我应该使用它们。就个人而言,如果代码只处理不可变对象,而不是一直改变状态,则代码看起来会更好。
第 15 项:最小化可变性,有效的 Java 2ed 中也建议使用不可变对象。
如果我有一个对象实现为JavaBean,它看起来像这样:Person
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;
}
}
或者更接近 C 中的 a:struct
public class Person {
public final String name;
public final Place birthPlace;
public Person(String name, Place birthPlace) {
this.name = name;
this.birthPlace = birthPlace;
}
}
我还可以在不可变对象中使用 getter 来隐藏实现细节。但是由于我只使用它作为一个,我更喜欢跳过“getters”,并保持简单。struct
简单地说,我不明白为什么使用JavaBeans更好,或者我是否可以并且应该继续使用我不可变的POJO?
许多Java库似乎对JavaBeans有更好的支持,但随着时间的推移,对不可变POJO的更多支持可能会变得更加流行?