我现在已经实现了一些 Java 应用程序,到目前为止只有桌面应用程序。我更喜欢使用不可变对象在应用程序中传递数据,而不是使用带有 mutator(setter和 getter)的对象,也称为 JavaBeans。
但是在 Java 世界中,使用 JavaBeans 似乎要普遍得多,我不明白为什么要使用它们。就个人而言,如果它只处理不可变对象而不是一直改变状态,那么代码看起来会更好。
在Item 15: Minimize mutability , Effective 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;
}
}
我也可以在不可变对象中使用 getter 来隐藏实现细节。但由于我只使用它作为struct
我更喜欢跳过“getters”,并保持简单。
简单地说,我不明白为什么使用 JavaBeans 更好,或者我是否可以并且应该继续使用我的不可变 POJO?
许多 Java 库似乎对 JavaBeans 有更好的支持,但是随着时间的推移,对不可变 POJO 的更多支持可能会变得越来越流行?