Anotasyonlar, Java 5 ile birlikte, derleyici ve çeşitli çerçeveler tarafından kullanılabilen meta veriler sağlamak için eklenmiştir. Başlangıçta, JUnit veya Hibernate gibi araçların koda daha iyi etkileşime girmesine yardımcı oluyordu; bunun için tekrarlayıcı ya da harici konfigürasyon yazmaya gerek yoktu.
Anotasyonlar, sınıflara, metodlara, alanlara, parametrelere ve hatta yerel değişkenlere bilgi ekleyerek kullanılabilir. Derleme aşamasında, çalışma zamanında veya kaynak kodu işlenirken, doğrulama, ek dosya üretimi veya programın davranışını değiştirmek için kullanılabilirler.
Kendi anotasyonunuzu oluşturmak için @interface anahtar kelimesi kullanılır.
Kod örneği:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value(); } class Example { @MyAnnotation("Test") public void annotatedMethod() {} }
Anahtar özellikler:
Anotasyonlar sadece çalışma zamanını mı etkiler?
Hayır, anotasyonlar yalnızca kaynak koduyla (SOURCE), byte koduyla (CLASS) sınırlı olabilir veya çalışma aşamasında (RUNTIME) erişilebilir. Etkileri, RetentionPolicy’ye bağlıdır.
@Retention(RetentionPolicy.SOURCE) public @interface SourceOnly {}
Anotasyon parametreleri herhangi bir türde olabilir mi?
Hayır, geçerli türler yalnızca ilkel türler, dizgeler, enumerasyonlar, diğer anotasyonlar ve bu türlerin dizileridir. Nesneler kullanılamaz.
Anotasyonlar miras alınabilir mi?
Teknik olarak, anotasyonlar sınıflar gibi miras alınmaz. @Inherited ile işaretlenmiş anotasyon, yalnızca miras alan sınıflara yayılır (metodları etkilemez).
retention ve target sırası kullanımıBüyük bir projede bir geliştirici, test otomasyonunu sağlamak için onlarca farklı anotasyon oluşturmuş ve bunları tanımlamadan, belgelerle desteklemeden ve kapsamlarını sınırlamadan bırakmıştır. Sonuç olarak, yeni bir ekip üyesinin hangi anotasyonların nereye çalıştığını anlaması zor olmuştur.
Artılar:
Eksiler:
Ekip, kendi anotasyonlarını yazmak için katı bir strateji uygulamıştır: yalnızca gerekli olanları eklemiş, her birini ayrıntılı olarak açıklamış ve kapsamlarını sınırlamıştır.
Artılar:
Eksiler: