Java Annotations

Posted by dogukanhan on March 26, 2020 · 2 mins read

Bir sınıfa, interface’e, metota, sınıf değişkenlerine çalışmalarına ve özelliklerine yönelik java derleyicisine, java sanal makinesine bilgi vermek için kullanılır.

Java içerisinde yer alan bazı annotationlar

  • @Override
  • @SuppressWarnings
  • @Deprecated

@Override override edilen metotun üstüne konulur bu sayede java derleyicisi metotun bir üst sınıfda yer alıp almadığını kontrol eder ve hataların önüne geçilmiş olur, bazı durumlarda kazara metot overload edilmiş veya ismi yanlış girilmiş olabilir dolayısıyla bunların engellenmesi sağlar.

@Override
    void doSomething() {
        System.out.println("do");
    }

@SuppressWarnings Java derleyicisi tarafında warning(uyarıların) lerin gösterilmesini kapatır. Metotların ve sınıfların üzerine konulabilir.

@Deprecated bir sınıfın veya metodun artık kullanılmaması gerektiğini, yakında kullanımdan kalkabileceğini ve eskimiş olduğu şeklinde bir işaretleme yapar bu metot veya sınıf kullanıldığında uyarı alınmasını sağlar.

@Deprecated
void eskiBirMetot() {
 System.out.println("eski kullanım");
}

Annotation Tanımlamak

Kendimiz bir Annotation tanımlamak istiyorsak @interface elementini kullanırız. Örnek olarak

@interface MyAnnotation{}  

Üç farklı Annotation tipi vardır ve içerisindeki metot sayısına göre sınıflandırılırlar, bunlar:

  • Marker Annotation : Metot içermez.
  • Single-Value Annotation : Sadece bir tane metot bulundurur.
  • Multi-Value Annotation : Birden fazla metot bulundurur.

Marker Annotation

@interface MyAnnotation{}  

Single-Value Annotation

Default anahtar kelimesi kullanılarak varsayılan bir değer atanabilir, buradaki value değerinin ataması Annotation kullanılırken yapılır.

@interface MyAnnotation {
 int value() default 0;
}
@MyAnnotation(value=10)  // Kullanım örneği

Multi-Value Annotation

@interface MyAnnotation {
 int value1();
 String value2();
 String value3();
}

Custom Annotation Tanımlanmasında Kullanılan Annotationlar

Java içerisinde yer alan bazı Annotation’lar yardımı ile tanımladığımız Annotation’lara kullanımına yönelik düzenleme sağlayabiliriz.

  • @Target: Nerelerde kullanılabileceğini belirler(Metot, Sınıf, Değişken, Parametre vb)
  • @Retention: Kaynak kodda, derleme aşamasında ve çalışma zamanında olmak üzere üç farklı değeri alabilir. Kullanım yerine göre ayrım yapılmasını sağlar.
  • @Inherited : Kalıtım ile aktarılmasını sağlar.
  • @Documented : Java doc üretildiğinde gözükmesini sağlar.

Resources: https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html