Я реализовал несколько приложений 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;
}
}
У меня также могут быть геттеры в неизменяемом объекте, чтобы скрыть детали реализации. Но поскольку я использую его только как struct
, я предпочитаю пропустить "геттеры" и сохранить его простым.
Просто я не понимаю, почему лучше использовать JavaBeans, или я могу и должен продолжать работать с моими неизменяемыми POJO?
Многие из библиотек Java, похоже, лучше поддерживают JavaBeans, но, возможно, больше поддержки неизменяемых POJO становится более популярным с течением времени?