Java Dipnot temsil eden bir etikettir. meta veri yani Java derleyicisi ve JVM tarafından kullanılabilecek bazı ek bilgileri belirtmek için sınıf, arayüz, yöntemler veya alanlarla eklenmiştir.
Java'daki ek açıklamalar ek bilgi sağlamak için kullanılır, dolayısıyla XML ve Java işaretleyici arayüzleri için alternatif bir seçenektir.
Öncelikle bazı yerleşik açıklamaları öğreneceğiz, ardından özel açıklamalar oluşturmaya ve kullanmaya devam edeceğiz.
Yerleşik Java Ek Açıklamaları
Java'da birkaç yerleşik açıklama vardır. Bazı ek açıklamalar Java koduna, bazıları ise diğer ek açıklamalara uygulanır.
Java kodunda kullanılan Yerleşik Java Ek Açıklamaları
- @Geçersiz kıl
- @SuppressUyarılar
- @Kullanımdan kaldırıldı
Diğer ek açıklamalarda kullanılan Yerleşik Java Ek Açıklamaları
- @Hedef
- @Tutulma
- @Miras
- @Belgelendi
Yerleşik Ek Açıklamaları Anlamak
Önce yerleşik ek açıklamaları anlayalım.
@Geçersiz kıl
@Override ek açıklaması, alt sınıf yönteminin üst sınıf yöntemini geçersiz kıldığını garanti eder. Aksi takdirde derleme zamanı hatası oluşur.
Bazen yazım hataları vb. gibi saçma hatalar yaparız. Bu nedenle, yöntemin geçersiz kılındığına dair güvence sağlayan @Override notunu işaretlemek daha iyidir.
Java'da dizi sıralama
class Animal{ void eatSomething(){System.out.println('eating something');} } class Dog extends Animal{ @Override void eatsomething(){System.out.println('eating foods');}//should be eatSomething } class TestAnnotation1{ public static void main(String args[]){ Animal a=new Dog(); a.eatSomething(); }}Şimdi Test Edin
Output:Comple Time Error
@SuppressUyarılar
@SuppressWarnings ek açıklaması: derleyici tarafından verilen uyarıları bastırmak için kullanılır.
import java.util.*; class TestAnnotation2{ @SuppressWarnings('unchecked') public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('sonoo'); list.add('vimal'); list.add('ratan'); for(Object obj:list) System.out.println(obj); }}Şimdi Test Edin
Now no warning at compile time.
@SuppressWarnings('unchecked') ek açıklamasını kaldırırsanız, genel olmayan koleksiyon kullandığımız için derleme zamanında uyarı gösterecektir.
@Kullanımdan kaldırıldı
@Deprecated ek açıklaması, bu yöntemin kullanımdan kaldırıldığını belirtir, böylece derleyici uyarı yazdırır. Gelecek sürümlerde kaldırılabileceği konusunda kullanıcıya bilgi verir. Bu nedenle bu tür yöntemleri kullanmamak daha iyidir.
yazılım testi
class A{ void m(){System.out.println('hello m');} @Deprecated void n(){System.out.println('hello n');} } class TestAnnotation3{ public static void main(String args[]){ A a=new A(); a.n(); }}Şimdi Test Edin
Derleme Zamanında:
Note: Test.java uses or overrides a deprecated API. <br> Note: Recompile with -Xlint:deprecation for details.
İşlem esnasında:
hello n
Java Özel Ek Açıklamaları
Java Özel ek açıklamalar veya Java Kullanıcı tanımlı ek açıklamaların oluşturulması ve kullanılması kolaydır. @arayüz element bir açıklama bildirmek için kullanılır. Örneğin:
@interface MyAnnotation{}
Burada MyAnnotation özel açıklama adıdır.
Java özel açıklama imzası için hatırlanması gereken noktalar
Programcının hatırlaması gereken birkaç nokta vardır.
- Metodun herhangi bir throw cümlesi olmamalıdır
- Yöntem aşağıdakilerden birini döndürmelidir: ilkel veri türleri, String, Class, enum veya bu veri türlerinin dizisi.
- Metodun herhangi bir parametresi olmamalıdır.
- Ek açıklamayı tanımlamak için arayüz anahtar sözcüğünün hemen önüne @ eklemeliyiz.
- Yönteme varsayılan bir değer atayabilir.
Ek Açıklama Türleri
Üç tür ek açıklama vardır.
- İşaretleyici Açıklaması
- Tek Değerli Açıklama
- Çoklu Değer Açıklaması
1) İşaretleyici Açıklaması
Yöntemi olmayan bir açıklamaya işaretleyici açıklama adı verilir. Örneğin:
@interface MyAnnotation{}
@Override ve @Deprecated işaretleyici açıklamalardır.
2) Tek Değerli Açıklama
Tek yönteme sahip bir açıklamaya tek değerli açıklama adı verilir. Örneğin:
sayıların alfabesi
@interface MyAnnotation{ int value(); }
Varsayılan değeri de sağlayabiliriz. Örneğin:
@interface MyAnnotation{ int value() default 0; }
Tek Değerli Ek Açıklama nasıl uygulanır?
Tek değer açıklamasını uygulayacak kodu görelim.
@MyAnnotation(value=10)
Değer herhangi bir şey olabilir.
3) Çok Değerli Açıklama
Birden fazla yöntemi olan açıklamaya Çoklu Değer açıklaması adı verilir. Örneğin:
@interface MyAnnotation{ int value1(); String value2(); String value3(); } }
Varsayılan değeri de sağlayabiliriz. Örneğin:
alfabe numarası
@interface MyAnnotation{ int value1() default 1; String value2() default ''; String value3() default 'xyz'; }
Çoklu Değer Ek Açıklaması nasıl uygulanır?
Çoklu değer açıklamasını uygulayacak kodu görelim.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
Java'daki özel açıklamalarda kullanılan yerleşik Ek Açıklamalar
- @Hedef
- @Tutulma
- @Miras
- @Belgelendi
@Hedef
@Hedef etiketi, açıklamanın hangi türde kullanılacağını belirtmek için kullanılır.
Java.lang.annotation. Eleman Türü enum, açıklamanın uygulanacağı öğenin türünü belirtmek için TYPE, METHOD, FIELD vb. gibi birçok sabit bildirir. ElementType enum'un sabitlerini görelim:
Eleman Türleri | Ek açıklamanın uygulanabileceği yer |
---|---|
TİP | sınıf, arayüz veya numaralandırma |
ALAN | alanlar |
YÖNTEM | yöntemler |
İNŞAATÇI | inşaatçılar |
YEREL DEĞİŞKEN | yerel değişkenler |
ANNOTATION_TYPE | ek açıklama türü |
PARAMETRE | parametre |
Bir sınıf için ek açıklama belirtme örneği
@Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Bir sınıf, yöntemler veya alanlar için ek açıklama belirtme örneği
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @interface MyAnnotation{ int value1(); String value2(); }
@Tutulma
@Tutulma ek açıklama, ek açıklamanın hangi düzeyde kullanılabileceğini belirtmek için kullanılır.
Alıkoyma politikası | Kullanılabilirlik |
---|---|
RetentionPolicy.SOURCE | derleme sırasında atılan kaynak kodunu ifade eder. Derlenmiş sınıfta mevcut olmayacaktır. |
RetentionPolicy.CLASS | Java derleyicisinin kullanabileceği ancak JVM'nin kullanamayacağı .class dosyasını ifade eder. Sınıf dosyasına dahil edilmiştir. |
RetentionPolicy.RUNTIME | Java derleyicisi ve JVM tarafından kullanılabilen çalışma zamanını ifade eder. |
RetentionPolicy'yi belirtme örneği
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Özel ek açıklama örneği: ek açıklama oluşturma, uygulama ve bunlara erişme
Ek açıklama oluşturma, uygulama ve erişmeye ilişkin basit bir örneği görelim.
Dosya: Test.java
//Creating annotation import java.lang.annotation.*; import java.lang.reflect.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface MyAnnotation{ int value(); } //Applying annotation class Hello{ @MyAnnotation(value=10) public void sayHello(){System.out.println('hello annotation');} } //Accessing annotation class TestCustomAnnotation1{ public static void main(String args[])throws Exception{ Hello h=new Hello(); Method m=h.getClass().getMethod('sayHello'); MyAnnotation manno=m.getAnnotation(MyAnnotation.class); System.out.println('value is: '+manno.value()); }}Şimdi Test Edin
Output:value is: 10
bu örneği indir
Gerçek senaryoda yerleşik açıklamalar nasıl kullanılır?
Gerçek senaryoda, Java programcısının yalnızca ek açıklama uygulaması gerekir. Ek açıklama oluşturmasına ve erişmesine gerek yoktur. Ek açıklama oluşturma ve erişim, uygulama sağlayıcısı tarafından gerçekleştirilir. Açıklama adına Java derleyicisi veya JVM bazı ek işlemleri gerçekleştirir.
@Miras
Varsayılan olarak ek açıklamalar alt sınıflara aktarılmaz. @Inherited ek açıklaması, alt sınıflara miras alınacak ek açıklamayı işaretler.
@Inherited @interface ForEveryone { }//Now it will be available to subclass also @interface ForEveryone { } class Superclass{} class Subclass extends Superclass{}
@Belgelendi
@Documented Belgelere eklenecek açıklamayı işaretler.