現在、いくつかの Java アプリケーションを実装していますが、これまでのところデスクトップ アプリケーションのみです。私は、JavaBeans とも呼ばれるミューテーター (セッターとゲッター)を持つオブジェクトを使用する代わりに、アプリケーション内でデータを渡すために不変オブジェクトを使用することを好みます。
しかし、Java の世界では、JavaBeans を使用する方がはるかに一般的であるように思われますが、代わりに JavaBeans を使用する必要がある理由がわかりません。個人的には、常に状態を変更するのではなく、不変オブジェクトのみを処理する方がコードの見栄えが良くなります。
不変オブジェクトは、項目 15: 可変性を最小化する、Effective Java 2edにも推奨されています。
JavaBeanPerson
として実装されたオブジェクトがある場合、次のようになります。
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 のサポートが徐々に普及していくのではないでしょうか?