Должны ли все свойства обязательно влиять на методы hashcode () и equals () JavaBean? - PullRequest
1 голос
/ 19 сентября 2019

Чтобы класс был действительным Javabean (согласно Спецификации JavaBeans ), все его свойства должны быть протестированы в его методе equals() - и, соответственно, влиятьего hascode() реализация?Или некоторые свойства могут быть намеренно отложены в сторону?

Например, класс Person с:

  • id и name свойствами, представленными в гетерах и установщиках
  • конструктор без аргументов
  • equals и hashcode методы, учитывающие только id

, будут квалифицироваться как допустимые JavaBean?

1 Ответ

2 голосов
/ 19 сентября 2019

В отличие от других спецификаций Java, спецификация Java Beans довольно расплывчата.Идея состоит в том, что bean-компонент инкапсулирует некоторую функциональность многократного использования с акцентом на GUI.Во время этой спецификации существовала идея, что разработчики продают отдельные компоненты, например, некоторые элементы графического интерфейса.

Java Bean - это программный компонент многократного использования, которым можно визуально манипулировать в инструменте разработчика.

Спецификация отличает Java-бины от «обычных» библиотек Java:

Не все полезные программные модули обязательно должны превращаться в бины.Бины подходят для программных компонентов, которые можно визуально манипулировать и настраивать для достижения некоторого эффекта.Библиотеки классов являются подходящим способом предоставления функциональности, которая полезна для программистов, но не приносит пользы от визуальных манипуляций.

В спецификации не определены какие-либо требования для hashCode() и equals().Это зависит от вас, чтобы реализовать или не реализовать их.Также нет требований к конструкторам.

Если ваш класс предоставляет некоторые повторно используемые функциональные возможности для GUI, вы можете назвать его Java Bean.Если ваш класс не рисует какие-либо элементы в GUI, не реагирует на события GUI, то это не Java-бин в смысле этой спецификации.Но, эй, как часто вы видите приложения, в которых GUI реализован на Java?:)

Многие разработчики называют Java-бин любым классом, который удовлетворяет только некоторым требованиям данной спецификации, в основном определенным в разделах 8.1, 8.2, 8.3, 8.6, и игнорирует любые другие требования, такие какте о слушателях и событиях.В этом смысле ваш класс является Java-бином.

Для hashCode () и equals (): Вы можете использовать некоторые свойства в hashCode() и equals().Это зависит от варианта использования.Например, у вашего класса есть 4 атрибута: ID, имя, фамилия и любимый напиток.В одном случае использования вам может понадобиться различать экземпляры объектов только по именам.Тогда вы будете использовать только имя и фамилию в hashCode() и equals() и игнорировать ID и любимый напиток.В некоторых других случаях использования вы можете рассматривать этот класс как назначение напитка человеку, и вам нужно будет включить не только имя и фамилию, но и любимый напиток в hashCode() и equals().В некоторых других случаях использования у вас может быть ограничение на то, что каждая комбинация атрибутов уникальна и для различения экземпляров достаточно использовать ID, поэтому у вас будет только один идентификатор атрибута в hashCode() и equals().В зависимости от ваших целей вы будете применять эти методы по-разному.

...