Java'da bir sınıfın değiştirilemez olduğunu nasıl ekleyebilirim?


14

Son zamanlarda, değişmez nesnelerin ne kadar yararlı olduğuna ve örneğin bir kurucuya öğeleri iletirseniz ve sınıfınız değişmezse, tökezleyemezlerse, bu öğeleri kopyalamanız gerekir.

Bu, projem hakkında çok fazla kontrol veya bilgi gerektiriyor, çünkü eğer

public A(B foo)

ve Bdeğişmez değil, Akopyalamak zorundayım B. Şimdi hayal Bedilemez gibi görünüyor, ama yapıcıda değişebilir sınıfları var vb.

Bir sınıfın Java'da değiştirilemez olup olmadığını belgelemek için standart veya en iyi uygulama var mı? @immutableJavadoc'da anahtar kelime yok gibi görünüyor .

@Immutable açıklama tamamen otomatik sınıfı nesil için farklı ve standart Java parçası değil bir şey gibi görünüyor.


2
Birincisi, defansif kopyalama bunu atlamanızı sağlar. İkinci olarak, bunu belgelemek için yol Javadoc sınıfı
raptortech97

"bunu belgelemek için yol Javadoc sınıfı" Bunu yapmanın standart bir yolu var mı? O zaman bu kabul edilmiş cevap olacaktır.
Aufziehvogel

@ raptortech97 Değişmez sınıfların en büyük avantajlarından biri, savunma amaçlı kopyalamaya gerek olmamasıdır . Değişmez olduğu iddia edilen bir nesnenin defalarca kopyalanması gerekiyorsa, bunu yanlış yapıyorsunuz.
itsbruce

1
@itsbruce Değişken nesneleri kopyalamaktan bahsediyordu. Ayrıca, değişmez bir nesneyi kopyalamanın bir nedeni vardır - önbellek yeri. Bazı çöp toplayıcılar, nesnelerin göreli sırasını korur, böylece birlikte tahsis edilen nesneler birlikte kalır.
Doval

Haklısın. Benim hatam.
itsbruce

Yanıtlar:


7

StringSınıfın belgelerine bakarken (kalın metin yaptığım bir şeydir):

String sınıfı karakter dizelerini temsil eder. Java programlarındaki "abc" gibi tüm dize değişmezleri bu sınıfın örnekleri olarak uygulanır. Dizeler sabittir; değerleri oluşturulduktan sonra değiştirilemez. Dize arabellekleri değiştirilebilir dizeleri destekler. Dize nesneleri değiştirilemez olduğundan paylaşılabilirler.

Gördüğünüz gibi, belirli bir etiketleme veya başka işaretçiler yoktur, ancak bunlar JavaDoc'da Stringsınıfın sabit, değişmez bir nesneyi temsil ettiği sınıfı açıklarlar.

Bu nedenle, değişmez bir sınıf oluşturmak için bu Oracle eğitiminde verilen talimatları izlediğinizi varsayarsak, sınıfın değişmezliğinin belgelendiğinden emin olmak için, JavaDoc'ta sınıfı ve neyi tanımladığını belirttiğinizden emin olmalısınız. yapar.

Bu hala ihtiyacınız olana uymuyorsa, burada özel JavaDoc etiketlerini nasıl oluşturabileceğinize bir göz atabilirsiniz .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.