@Anotasyonlar (@Annotations)

anotasyonlar-annotations (büyük resim için tıklayın)

Anotasyonlar (Annotations) Nedir?

Java anotasyonları, kod üzerinde meta veriler sağlamak için kullanılan özel türlerdir. Anotasyonlar, kodun kendisini değiştirmez veya doğrudan çalıştırılmaz; derleyicilere, araçlara veya runtime (çalışma zamanı) sırasında uygulamalara bilgi verir. Kısacası, anotasyonlar bir çeşit "etiketleme" mekanizmasıdır.

Anotasyonların Amaçları

  1. Kodun Anlamını Açıklama: Kod hakkında bilgi sağlamak (ör. @Override).
  2. Derleyiciye Yönlendirme Yapma: Derleyiciye belirli kontroller yaptırmak veya uyarılar oluşturmak (ör. @Deprecated).
  3. Runtime Davranışları: Çalışma zamanında yansıma (reflection) yoluyla belirli işlemleri gerçekleştirmek.
  4. Framework ve Araç Desteği: Spring, Hibernate gibi framework'lerde kullanılan özel anotasyonlarla yapılandırma sağlamak.

Anotasyon Özellikleri

@Retention

  • Anotasyonun hangi aşamada kullanılacağını belirler:
    • SOURCE: Derleme sırasında kaybolur.
    • CLASS: Derlenir ancak runtime'da mevcut değildir.
    • RUNTIME: Runtime'da mevcut olur.

@Target

  • Anotasyonun nerede kullanılabileceğini belirtir:
    • ElementType.METHOD: Yalnızca metodlarda kullanılabilir.
    • ElementType.FIELD: Yalnızca değişkenlerde kullanılabilir.

@Inherited

  • Alt sınıfların bu anotasyonu miras alıp almayacağını belirtir.

@Documented

  • Anotasyonun Javadoc gibi belgelendirme araçlarında yer almasını sağlar.

Anotasyonların Kullanımı

Bir anotasyon, genellikle @ sembolüyle başlar ve bir sınıf, metod, değişken veya başka bir yapı üzerinde kullanılır.

@Override

public String toString() {

   return "Bu bir anotasyon örneğidir.";

}

@Deprecated

public void eskiYontem() {

   System.out.println("Bu yöntem artık kullanılmamalıdır.");

}

Java'daki Yaygın Anotasyonlar

Java'da bazı yaygın olarak kullanılan yerleşik anotasyonlar şunlardır:

1. @Override

Bir metodun bir üst sınıfta tanımlı bir metodu geçersiz kıldığını belirtir.

@Override

public void run() {

   System.out.println("Çalıştırılıyor.");

}

2. @Deprecated

Bir sınıf, metod veya değişkenin artık kullanılmaması gerektiğini işaretler. Derleyici bir uyarı verecektir.

@Deprecated

public void eskiMetod() {

   System.out.println("Bu metod eskidi.");

}

3. @SuppressWarnings

Derleyiciden gelen belirli uyarıları bastırır.

@SuppressWarnings("unchecked")

public void test() {

   List liste = new ArrayList(); // Uyarı verilmez.

}

4. @FunctionalInterface

Bir arayüzün yalnızca bir soyut metoda sahip bir fonksiyonel arayüz olduğunu belirtir.

@FunctionalInterface

interface Hesapla {

   int topla(int a, int b);

}

5. @SafeVarargs

Varargs kullanımında, tür güvenliği konusunda derleyici uyarılarını bastırır.

@SafeVarargs

public final void ekle(T... elemanlar) {

   // Güvenli varargs işlemleri

}

Kendi Anotasyonlarımızı Oluşturma

Java'da özel anotasyonlar oluşturabilirsiniz. Bunun için @interface anahtar kelimesi kullanılır.

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface Test {

   String bilgi() default "Bu bir test anotasyonudur.";

}

Kullanım

public class TestSinifi {

   @Test(bilgi = "Örnek test metodu")

   public void testMetodu() {

       System.out.println("Test çalışıyor.");

   }

}

Sonuç

Java anotasyonları, kodun anlamını ve işlevini zenginleştiren güçlü bir mekanizmadır. Hem yerleşik hem de özelleştirilebilir anotasyonlar ile kodun daha anlaşılır ve yönetilebilir olmasını sağlayabilirsiniz. Anotasyonlar, modern Java uygulamalarında (Spring, Hibernate gibi) yoğun şekilde kullanılmaktadır.

*Gönderi ve görsel chatgpt ile oluşturulmuştur.

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)