В чем разница между окончательным классом и записью?

Проще говоря, в чем разница между конечным классом и записью в Java 17?

В каком случае я должен использовать запись?

1 ответ

Record является неизменяемым классом , т.е. все его поля являются . Записи являются неявными, следовательно, как и обычный конечный класс , не могут быть расширены .

На записи накладывается ряд ограничений (подробнее см . JEP 395).

В отличие от обычных классов :

  • запрещено явно объявлять поля экземпляра внутри записей ( и напоминание: все поля являются , что является очень важным различием );
  • предложение не допускается с записями , потому что каждая запись неявно расширяет абстрактный класс Record;
  • запись не может быть объявлена ​​ни с одним из этих модификаторов: , , или же (как следствие неявного );
  • записи не могут объявлять инициализаторы экземпляров и собственные методы .

Записи должны быть «прозрачными носителями неизменяемых данных» , как говорится в JEP 395.

Они разработаны, чтобы быть краткими , конструктор по умолчанию , геттеры , а также будет сгенерирован компилятором для вас. Так что внутри записи вам нужно объявить только свою пользовательскую логику ( если она есть ), а объявление записи может быть буквально однострочным .

Рекорды сильно отличаются от обычных выпускных занятий .

Также, кроме упомянутых выше особенностей, для записей был перереализован механизм сериализации/десериализации , чтобы десериализация не обходила стороной конструктор.

В каком случае я должен использовать запись?

Короче говоря, если ваши объекты должны иметь состояние или вам нужно расширить определенный класс, то вы не можете использовать в таком случае.

С другой стороны, если ваши объекты предназначены только для передачи данных , они не предназначены для изменения или наследования от других классов, тогда это может быть хорошим кандидатом для реализации в качестве .

Другие вопросы по тегам