Ваш профессор прав. Вы не хотите слепо создавать методы получения и установки для всех переменных экземпляра. Вы хотите создать их там, где они необходимы.
Если у вас есть класс BankAccount
с переменной экземпляра balance
, создание геттеров и сеттеров для него имеет смысл, если вы хотите иметь возможность проверять и устанавливать баланс.
Даже здесь есть сокрытие информации - в форме инкапсуляции реализации. Получатель "double getBalance()
" может просто вернуть значение базовой переменной экземпляра, если это double
, или он может возвращать значение, полученное из BigDecimal
, если это выбор реализации для переменной, или может вызывать удаленный веб-сервис и возвращать результат. Таким образом, метод получения / установки все еще позволяет варьировать реализацию и, таким образом, не нарушает инкапсуляцию (и, соответственно, не делает JavaBeans).
То, что JavaBeans делает для вас, - это определение интерфейса (getXXX(), setXXX()
) для получения и установки «свойств», атрибутов класса, которые пользователи обычно хотят проверять или изменять. Если в вашем классе есть информация, которая не считается «свойством», нет необходимости раскрывать ее. Например, скажем, класс BankAccount
имеет переменную экземпляра, используемую для проверки снятия средств. Если клиенту не требуется доступ или изменение этого, нет смысла создавать для него метод получения или установки.