但在Java世界中,使用JavaBeans似乎更为常见,我不明白为什么我应该使用它们。就个人而言,如果代码只涉及不可变对象而不是一直改变状态,那么它看起来更好。
在《Effective Java 2ed》中的第15项“最小化可变性”中也推荐使用不可变对象。
如果我将一个名为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;
}
}
或者更接近C语言中的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方法来隐藏实现细节。但是因为我只将其用作结构体,所以我更喜欢跳过"getter"并保持简单。
简单地说,我不明白为什么使用JavaBeans更好,或者我是否可以并且应该继续使用我的不可变POJO?
许多Java库似乎更支持JavaBeans,但也许随着时间的推移,对不可变POJO的支持会变得更加流行?