Несколько библиотек и спецификаций (например, JPA, JavaEL) используют спецификацию Java Beans и полагаются именно на это поведение.
Использование геттеров и сеттеров имеет то преимущество, что позволяет добавлять код внутри этих методов, например. для создания «виртуальных» свойств, которые вычисляются во время выполнения, а не сохраняются в поле.
Кроме того, использование геттеров и сеттеров позволяет другим фреймворкам обертывать эти методы и предоставлять дополнительные функции, такие как ведение журнала изменений и т. Д. Во многих случаях это делается путем внутреннего создания подкласса и переопределения геттеров и сеттеров. Пользователь не заметил бы этого, поскольку это «ткачество» или «проксирование» часто выполняется во время выполнения. Например, Hibernate использует это для обеспечения ленивой функциональности загрузки, когда вы вызываете getter для доступа к соответствующей коллекции или сущности.
Update:
По желанию пример для "виртуальных" свойствами:
Предположим, у вас есть Person
боб, который имеет поля firstName
и lastName
. Вы можете добавить виртуальную собственность name
только для чтения, предоставляя следующие поглотитель:
public String getName() {
return getFirstName() + " " + getLastName();
}
Update 2:
Еще одно замечание о том, почему методы получения и установки необходимы: это в основном идет от того, как работает Java. Языки, которые непосредственно поддерживают свойства, такие как C#, позволят вам написать код, например person.firstName = "Joe";
, и по-прежнему использовать сеттер, если он есть, или выбросить ошибку, если свойство доступно только для чтения. Поэтому, если вы добавите установщик для firstName
, эти языки будут внутренне переводить firstName = "Joe"
в setFirstName("Joe")
без необходимости изменения разработчика - довольно элегантное решение. :)
Поскольку Java не поддерживает это, мы должны всегда предоставлять методы доступа (сеттеры/геттеры), даже если они не делают ничего особенного - на случай, если они могут необходимо изменить в будущем ,
Я думаю, вам нужно (повторно) посетить концепцию ООП. –