Я реализовал несколько приложений 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?