www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA ANNOTATIONS

Last update: 10/3/2014 6:28:00 PM

Yazan:Fatih KABAKCI

Annotation(Not) kavramı Java programlama diline JDK 5.0 ile dahil olmuştur.Annotation'lar bir Java programının yapısını değiştirmeyen,sadece yazılan bir program modülü hakkında bilgi veren yapılardır.Genelde yardım amaçlı programcıya hitap eden annotation'lar,3 farklı yapıda(kaynak kod,derleme anı veya çalışma anı) çalışarak yazılan kodlara dair açıklamalar getirir. java.lang.annotation paketinde tanımlanan Annotation'lar @interface belirteciyle deklare edilir.Aşağıda örnek bir Annotation deklerasyonu gösterilmektedir.



Yukarıda görüldüğü gibi bir Annotation @interface belirteciyle deklare edilir ve içerisinde tanımlanan her üye birer metot notasyonunda tanımlanır.Yani bir üye değişken veya başka bir yapı tanımlayamazsınız.Ancak daha sonra görülebileceği gibi tanımlanan bu metotların kullanımı birer field,yani üye değişkenler gibidir.Deklarasyonda unutulmaması gereken,her üyenin birer metot olarak tanımlanması gerektiğidir.

Annotation'lar birbirlerini inherit edemezler.Java da bir annotation tanımladığınızda,tanımladığınız annotation otomatik olarak Annotation arabirimini genişletir.Ancak özel olarak inheritance yöntemi kullanılamaz.Annotation'lar Object sınıfı tarafından tanımlanmış ,hashCode(),equals() ve toString() metotlarını devre dışı bırakır.Daha önceden de bahsedildiği gibi,Annotation 3 farklı yapıda tasarlanarak kullanılabilir.Sadece kaynak kod dosyası için ya da derleme anında .class dosyası için veyahutta .class dosyası içerisine entegre edilmiş çalışma anında bilgi alımı için kullanılabilir.Tüm bunlar için java.lang.annotation paketinde tanımlı Retention arabirimi ve RetentionPolicy Enumeration'u kullanılmaktadır.

Retention ile bir hatırlatma yapısı oluşturulur.RetentionPolicy ile de oluşturulan bu hatırlatma içerisinde bir politika,yani annotation'un yukarıda sayılan 3 çalışma şeklinden hangisi ile çalışacağı,kuralı oluşturulur.Aşağıda bunun fiili örneği görülmektedir.



RetentionPolicy bir enum'dur ve 3 farklı enum üyesi bulunmaktadır.Bu
  • SOURCE,koda yerleştirilen annotation'un sadece kaynak kod içerisinde yer alması için kullanılan politikadır.
  • CLASS,koda yerleştirilen annotation'un,derleme anında .class dosyasına gömülmesini sağlamak için kullanılan politikadır.Aksi belirtilmediği sürece default belirteç CLASS'dır.
  • RUNTIME,koda yerleştirilen annotation'un,derleme anında .class dosyasına gömerek,aynı zamanda çalışma anında da kullanılan bir politikadır.
RetentionPolicy enum'u ile,

RetentionPolicy.SOURCE
RetentionPolicy.CLASS
RetentionPolicy.RUNTIME

şeklinde 3 farklı politika ile bir Retention oluşturulabilir.Tüm anlatılanlara binaen aşağıda temel bir annotation örneği verilmektedir.Bu örnekte,projelerde sıklıkla kullanılan bir yaklaşım gösterilmektedir.Bilindiği üzere projelerde genellikle bir takım ekipler tarafından yürütülür ve yazılan modüller farklı programcılar tarafından paylaşılır.Bu örnekte de yazılan program hakkında başka bir programcıya bilgi veren ve sıklıkla kullanılan bir olay gösterilmektedir.Genellikle yorum satırları ile verilen bilgi,bu sefer bir annotation formunda verilmektedir.




Yukarıdaki programda yorum satırları ile başka bir programcıya aktarılan bilgi,bir annotation yapısıyla aktarılmaktadır.Project isimli annotation yapısında tanımlanan her üye birer mettottur.Ancak show() metodu içerisine gömülen bilgi zincirinde,üyeler birer field gibi kullanılmıştır.Dikkat edilmesi gereken diğer bir mevzu ise,tanımlanan annotation'un üzerinde bir hatırlatma politikasının olduğudur.Bu politika çalışma anında bilgi alımı amacıyla kullanıldığı için .RUNTIME olarak seçilmiştir.RUNTIME kullanımı bir yansıma(reflection) örneğidir.Yansıma ile çalışma anında bir sınıf hakkında bilgi alınabilir.Daha önceden de açıklandığı gibi aksi belirtilmediği müddetçe bu değer .CLASS'dır.Annotation ile yapılacak temel kullanım bu şekildedir.

Javada her yapı üzerine bir annotation eklenebilmektedir.Yukarıdaki örnekte bir metoda(show) annotation eklenmiştir.Şimdiki örnekte ise annotation kullanımının sınıf,kurucu metot,metot ve alan üzerinde de inşa edilmesi gösterilecektir.






Yukarıdaki örnekte Anno sınıfının farklı yapıdaki üyelerinin her birine birer annotation eklenmiştir.AnnotationEx1 sınıfı ile de,eklenen bu annotation'ların bilgileri alınmaktadır.Object sınıfı tarafından tanımlanan Class nesnesinin ve reflect paketi ile kullanılan diğer nesnelerin(Constructor,Method,Field) getAnnotation(class anno) metodu ile eklenen annotation'lar alınmaktadır.Bu metodun kullanımındaki class parametresi ise,bilginin hangi annotation'dan alınacağını belirtmek için kullanılmaktadır.Çünkü bir metoda,field'a veya sınıfa birden fazla annotation eklemesi yapılabilmektedir.Annotation'lara ait değerler ise metot çağrıları gibi(anno.id()) kullanılmaktadır.Daha önceden de bahsedildiği gibi,bir annotation üyesi metot olarak tanımlanır,bir field gibi değer atanır.Bu değerlerin çağrımı da birer metot gibi kullanılmaktadır.Annotation metotlarına bazen varsayılan durumunda da değer atamak isteyebilirsiniz.Bunun için aşağıdaki yapı kullanılmaktadır.



Diğer Annotation türleri

Bir metoda,sınıfa yada field'a parametre almadan yerleştirilen annotation'lara marker annotation adı verilir.Bu annotation daha çok ilgili zaman biriminde mevcut mu değil mi ? olup olmadığı kontrol edilmek için kullanılır.Method,Class,Constructor,Field sınıflarının sahip olduğu aşağıdaki metot bu iş için kullanılmaktadır.
boolean isAnnotationPresent(class nottipi)
Bazen annotation'lara tek bir değer atamak istediğiniz durumlar olabilir.Bunun için Java kestirme bir yol sunar.Single-member annotation bu amaçlı kullanılan bir yapıdır.Ancak tanımladığınız annotation üyesinin adı value() olmalıdır.Aşağıdaki örnekte görüldüğü gibi.


Yukarıdaki kullanımda görüldüğü gibi,annotation yerleşiminde value adı kullanılmadan direkt olarak 11 değer ataması yapılmaktadır.Bu da Java tarafından programcıya sunulan esnek kullanımlardan biridir.

Java Standart Annotation'lar

Java genel olarak bir çok standart annotation türü sunsa da,sık kullanılan ve bilinen 7 adet annotation bulunmaktadır.
  • @Depecated,programcıya program içerisindeki bir noktada yapılan deklarasyon değişikliğini bildirmek için kullanılan bir marker annotation türüdür.Örneğin,değişen bir sınıf yapısını bildirmek için bu annotation kullanılabilir.
  • @Documented,genelde bir annotation için annotation eklemesi yapılırken kullanılan bir marker annotation türüdür.
  • @Inherited,adı üzerinde inheritance durumunda kullanılan bir marker annotation türüdür.Sınıf deklarasyonunda kullanılan bu annotation,alt sınıf'ın üst sınıfı devraldığı durumlarda bu annotation alt sınıfa döndürülür.
  • @Override,bir arabirim implement edildiği zamanlarda,bir metodun devre dışı bırakılması gerektiğini programcıya söyleyen marker annotation türüdür.Sadece metotlar için kullanılmaktadır.
  • @Retention,annotation politikası tanımlamak için kullanılan bir annotation türüdür.
  • @SuppressWarnings,derleyicinin bir takım yazılan kodlar için itiraz edebileceği durumlarda kullanılan bir annotation türüdür.Genelde yeni bir JDK üzerinde modası geçmiş eski kodlar kullanılırken de bu uyarı alınır.Derleyicinin olumsuz yönde itiraz edebileceği her durumda kullanılır.
  • @Target,annotation deklarasyonu için kullanılır.Yani eklenecek annotation'un hangi yapılar için kullanılacağını belirtir.ElementType enumaration parametresi ile annotation deklarasyonu belirlenir.

Sonuç olarak Annotation'lar programcılara veya sorumlu başka bir kişilere,yazılan program parçacıkları hakkında kodsal olarak bilgi vermeyi amaçlayan,programın kurgusunu etkilemeyen bileşenlerdir.Annotation'ları etkili bir şekilde kullanırsanız yazdığınız her programın sürdürebilirliği ve geliştirme hızı kuşkusuz belli oranda artacaktır.
MemberCommentDate:
guest
bu güzel yazı için sonsuz teşekkürler

Elman

3/12/2019 9:39:00 AM

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Spring Boot, Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.