ProgramlamaJava geliştirici

Java'daki final mekanizması nasıl çalışır - değişkenler, yöntemler ve sınıflar için ve bu modifikatörün yanlış kullanılmasının beklenmedik etkileri nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

final Java'da şunlar için kullanılır:

  • Değişkenler — başlatıldıktan sonra değişmez hale gelir;
  • Yöntemler — miras alanlarda yeniden tanımlanamaz;
  • Sınıflar — miras alan oluşturulamaz.

Özellikler ve ince noktalar:

  • final değişken, ilan edildiğinde veya yapıcıda başlatılmalıdır;
  • final referans, referansı değiştirmeye izin vermez, ancak referans üzerinden nesneyi değiştirmek mümkündür (eğer immutable değilse!);
  • final sınıftan miras almak (örneğin, String, Math) mümkün değildir;
  • final yöntemi override edilemez, miras alınan sınıf olsa bile.
final class A {} // class B extends A yapılamaz class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // hata: foo'yu geri döndüremezsiniz } final int COUNT = 10;

Aklı karıştıran soru.

final değişkenin işaret ettiği nesnenin durumunu değiştirmek mümkün mü?

Cevap: Evet, eğer bu immutable nesne değilse. Örneğin:

final List<String> names = new ArrayList<>(); names.add("Vasya"); // Bu izin verilir - referans üzerinden nesne değişir, ama referans kendisi değişmez names = new ArrayList<>(); // Derleme hatası

Gerçek hata örnekleri, konu hakkındaki ince noktaların bilinmemesi nedeniyle.


Hikaye

Günlükleme sisteminde tek bir final Logger tüm kodda geçiriliyordu, nesnenin tamamen korumalı olduğu düşünülüyordu - ancak ayarları kamuya açık bir yöntem üzerinden değiştirdiler ve küresel yapılandırmayı bozdu.

Hikaye

Bir yardımcı sınıfta final türünde List alanları oluşturuldu ve sonra bunları dışarıya genel kullanım için döndürmeye çalışıldı. Dış kod, elde edilen referans aracılığıyla liste içeriğini rahatlıkla değiştirdi - final bunu engellemez.

Hikaye

final sınıflara dayanarak bir dış API'yi genişletme ihtiyacı ortaya çıktı. Bunun nedeniyle genişletme yapmak imkansız oldu, mantığı kopyalamak ve iki bağımsız ürün dalını sürdürmek zorunda kaldık, bu da geçişleri zorlaştırdı.