Зараз я впровадив кілька програм Java, поки що лише настільні програми. Я вважаю за краще використовувати незмінні об'єкти для передачі даних у програмі, замість того, щоб використовувати об'єкти з мутаторами (сетери та геттери ), які також називаються JavaBeans.
Але у світі Java, здається, набагато частіше використовувати 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;
}
}
Я міг би також мати геттери в незмінному об’єкті, щоб приховати деталі реалізації. Але оскільки я використовую його лише як a, struct
я віддаю перевагу пропускати "геттери", і залишати його простим.
Просто я не розумію, чому краще використовувати JavaBeans, або якщо я можу і повинен продовжувати працювати зі своїми незмінними POJO?
Багато бібліотек Java, схоже, мають кращу підтримку JavaBeans, але, можливо, більша підтримка незмінних POJO з часом стає все популярнішою?