Когда запись не является типом значения?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Когда запись не является типом значения?

Сообщение Anonymous »

Введение
Jep 401 представит «классы значений» в языке программирования Java. Как таковые, у них нет идентичности, поскольку их внутреннее состояние полностью описывает то, чем они являются. Нецели этого JEP содержат следующий пункт:

Это не цель автоматически рассматривать существующие классы как классы значений, даже если они имеют некоторые общие характеристики классов значений. [...]

Теперь, чтобы пометить любой существующий класс или запись как «класс значения», вам просто нужно добавить перед ним ключевое слово value new, и вуаля, он потеряет свою идентичность. Это заставило меня задуматься:
Вопрос: Когда запись не является типом значения?
JEP на самом деле не касается этого. Там просто говорится:

Разработчики могут объявлять свои собственные классы значений, применяя модификатор value к любому классу, экземпляры которого должны быть неизменяемыми и взаимозаменяемыми:
  • Неизменяемые: все поля экземпляра класса должны быть окончательными, а значение домена, представленное экземпляром, не будет меняться со временем; и
  • Взаимозаменяемость: нет необходимости различать два отдельно созданных экземпляра, которые представляют одно и то же значение домена
[...]
Классы записей являются окончательными и все их поля являются окончательными, поэтому они часто являются хорошими кандидатами на роль классов значений.

Брайан Гетц, один из архитекторов языка Java, часто описывает записи как «данные, все данные и ничего, кроме данных». Но если записи на самом деле представляют собой «не что иное, как данные», не означает ли это, что они не должны иметь «дополнительную» идентичность; которое, по крайней мере в моей мысленной модели, представляет собой просто невидимое поле, содержащее некоторое значение, мягко эквивалентное результату System.identityHashCode(this)?
Далее
  • Каковы некоторые реальные варианты использования записей, которые не являются типами, основанными на значениях?
  • (Почему) java.lang.Enum (не) хороший кандидат на роль класса значений?


Подробнее здесь: https://stackoverflow.com/questions/798 ... value-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»