ProgramlamaBackend Geliştirici

Java'da anotasyonların nasıl desteklendiğini ve kendi kullanıcı anotasyonlarınızı nasıl oluşturacağınızı açıklayın. Pratikte bunları nasıl doğru kullanmalıyız?

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

Cevap.

Sorunun Tarihi:

Anotasyonlar, Java 5'te, programın mantığını değiştirmeden byte koduna meta bilgi eklemek amacıyla ortaya çıktı. Anotasyonlar, sınıfları ve yöntemleri çerçeveler, derleyiciler veya ayrıştırıcılar için ek bilgilerle kolayca donatmaya olanak tanır.

Sorun:

Kötü tasarlanmış veya yanlış kullanılan anotasyonlar, kodun bakımını zorlaştırır. Bazen geliştiriciler anotasyonların kullanımını karıştırır veya kendi anotasyonlarını nasıl yapacaklarını bilmez ve parametreli anotasyonlar oluşturma olanağının farkında olmazlar.

Çözüm:

Kendi anotasyonunuzu oluşturmak:

import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }

Anotasyonu kullanma:

public class TestClass { @MyTest("Example") public void testMethod() {...} }

Anahtar özellikler:

  • Anotasyonlar varsayılan değerlerle parametreler içerebilir
  • Anotasyon, @Target ve @Retention meta anotasyonlarıyla donatılmalıdır
  • Runtime Retention kullanımı, anotasyonun Reflection aracılığıyla kullanılmasına olanak tanır

Yanıltıcı Sorular.

Bir anotasyon diğer bir anotasyondan miras alınabilir mi?

Cevap: Hayır, Java'da anotasyonlar arasında miras alma desteklenmemektedir.

Bir anotasyonun tüm sınıf mirasçılarında zorunlu hale getirilmesi mümkün mü?

Cevap: Doğrudan değil. Anotasyonun varlığını elle kontrol ederek ek olarak yansıma ile kontrol etmeniz gerekir.

@Retention(Class) ile @Retention(RUNTIME) arasındaki fark nedir?

Cevap:

  • @Retention(RUNTIME): Anotasyon, yansıma ile çalışma zamanında erişilebilir
  • @Retention(CLASS): Anotasyon byte kodunda saklanır, ancak Yansıma aracılığıyla erişilemez (sadece derleyici tarafından kullanılır)

Yaygın Hatalar ve Antipatternler

  • Kendi anotasyonlarınız için @Target ve @Retention belirtmemek
  • Anotasyonları amacına uygun olarak kullanmamak (örneğin, bunları uygun olmayan araçlarla veya tasarlanan ortamın dışında işlemek)

Gerçek Hayat Örneği

Negatif Durum

Projede yapılandırmayı XML'den anotasyonlara değiştirmeye karar verdiler ama @Retention(RUNTIME) eklemediler.

Artılar:

  • Kod daha kompakt hale geldi

Eksiler:

  • Anotasyonlar çalışma zamanında görünmüyor, çerçeve bunları işleyemiyor.

Pozitif Durum

Sunucuda gerçek iş mantığının çağrısını kontrol eden @Audit adı verilen özel bir anotasyon ayarlandı.

Artılar:

  • Merkezi, şeffaf denetim

Eksiler:

  • Anotasyonların işlenmesi biraz çalışma zamanı yükü ve dikkatli döngü ayrıştırması gerektiriyor.