Як слід зазначити, що клас незмінний на Java?


14

Нещодавно я натрапив на те, наскільки корисні незмінні об'єкти, і що, наприклад, якщо ви передаєте елементи конструктору, і ваш клас повинен бути незмінним, ви повинні скопіювати ці елементи, якщо вони самі по собі не змінюються.

Для цього потрібно багато перевірки чи знань про мій проект, тому що якщо я маю

public A(B foo)

і Bне є незмінним, Aмені доведеться копіювати B. Тепер уявіть, що Bздається непорушним, але сам має змінні класи в конструкторі тощо.

Чи існує стандарт або найкраща практика документування, якщо клас незмінний на Java? Здається, @immutableу Javadoc немає ключового слова.

@Immutable анотацій , здається, що - то зовсім інше для виробництва авто класу і не є частиною стандартної Java.


2
По-перше, захисне копіювання дозволяє обійти це. По-друге, спосіб документувати це клас Javadoc
raptortech97

"спосіб документувати це клас Javadoc" Чи існує стандартний спосіб цього зробити? Тоді це вже була б прийнята відповідь.
Aufziehvogel

@ raptortech97 Однією з головних переваг непорушних класів є те, що немає потреби в оборонному копіюванні. Якщо має бути захисна копія нібито незмінного об'єкта, ви робите це неправильно.
йогобрюс

1
@itsbruce Він говорив про копіювання змінних об'єктів. Також є одна причина копіювання незмінного об'єкта - кеш-локація. Деякі збирачі сміття зберігають відносне впорядкування об’єктів, тому об’єкти, виділені разом, залишаються разом.
Doval

Ти маєш рацію. Моє ліжко.
йогобрюс

Відповіді:


7

Переглядаючи документацію Stringкласу (жирний текст - це те, що я зробив):

Клас String представляє символьні рядки. Усі рядкові літерали в програмах Java, такі як "abc", реалізовані як екземпляри цього класу. Струни постійні; їх значення не можуть бути змінені після їх створення. Буферні рядки підтримують змінні рядки. Оскільки рядкові об'єкти є незмінними, ними можна ділитися.

Як бачимо, немає конкретного маркування або інших маркерів, однак, вони вказують у JavaDoc, що описує клас, що Stringклас являє собою постійний незмінний об'єкт.

Таким чином, припускаючи, що ви дотримувались інструкцій, наведених у цьому підручнику Oracle, щоб створити непорушний клас, щоб переконатися, що незмінність класу задокументована, вам слід просто переконатися, що ви згадуєте в ньому JavaDoc, що описує клас та що це робить.

Якщо це все ще не влаштовує те , що вам потрібно, ви могли б поглянути на те, як ви можете створювати власні теги JavaDoc тут .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.