Bu eğitimde, ek açıklamaların ne olduğunu, farklı Java notlarını ve bunları örnekler yardımıyla nasıl kullanacağımızı öğreneceğiz.
Java ek açıklamaları, program kaynak kodumuz için meta verilerdir (verilerle ilgili veriler).
Derleyiciye program hakkında ek bilgi sağlarlar ancak programın bir parçası değildirler. Bu ek açıklamalar, derlenen programın yürütülmesini etkilemez.
Ek açıklamalar ile başlar @
. Sözdizimi şöyledir:
@AnnotationName
Bir @Override
ek açıklama örneği alalım .
@Override
Ek açıklama belirtir, bu açıklama ile işaretlenmiş yöntem aynı yöntem adı, dönüş türü ve parametre listesi ile üst sınıf yöntemini geçersiz kılar.
@Override
Bir yöntemi geçersiz kılarken kullanılması zorunlu değildir . Bununla birlikte, eğer kullanırsak, derleyici bir şey yanlışsa (yanlış parametre türü gibi) yöntemi geçersiz kılarken hata verir.
Örnek 1: @Override Ek Açıklama Örneği
class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) )
Çıktı
Ben bir köpeğim.
Bu örnekte, yöntem displayInfo()
hem Hayvan üst sınıfında hem de Köpek alt sınıfında mevcuttur. Bu yöntem çağrıldığında, üst sınıftaki yöntem yerine alt sınıfın yöntemi çağrılır.
Ek açıklama biçimleri
Ek açıklamalar ayrıca öğeler (üyeler / öznitelikler / parametreler) içerebilir.
1. İşaretçi Ek Açıklamaları
İşaretçi ek açıklamaları üyeler / öğeler içermez. Yalnızca bir beyanı işaretlemek için kullanılır.
Sözdizimi şöyledir:
@AnnotationName ()
Bu ek açıklamalar öğe içermediğinden parantezler hariç tutulabilir. Örneğin,
@Override
2. Tek öğeli Ek Açıklamalar
Tek bir öğe ek açıklaması yalnızca bir öğe içerir.
Sözdizimi şöyledir:
@AnnotationName (elementName = "elementValue")
Yalnızca bir öğe varsa, o öğeyi değer olarak adlandırmak bir kuraldır.
@AnnotationName (value = "elementValue")
Bu durumda, eleman adı da hariç tutulabilir. Öğe adı varsayılan olarak değer olacaktır.
@AnnotationName ("elementValue")
3. Çok elemanlı Ek Açıklamalar
Bu ek açıklamalar virgülle ayrılmış birden çok öğe içerir.
Sözdizimi şöyledir:
@AnnotationName (element1 = "değer1", element2 = "değer2")
Ek açıklama yerleştirme
Herhangi bir beyanname, beyannamenin üzerine yerleştirilerek açıklama ile işaretlenebilir. Java 8'den itibaren, ek açıklamalar bir türden önce de yerleştirilebilir.
1. Yukarıdaki beyanlar
Yukarıda bahsedildiği gibi, Java açıklamaları sınıf, yöntem, arayüz, alan ve diğer program öğesi bildirimlerinin üzerine yerleştirilebilir.
Örnek 2: @SuppressWarnings Ek Açıklama Örneği
import java.util.*; class Main ( @SuppressWarnings("unchecked") static void wordsList() ( ArrayList wordList = new ArrayList(); // This causes an unchecked warning wordList.add("programiz"); System.out.println("Word list => " + wordList); ) public static void main(String args()) ( wordsList(); ) )
Çıktı
Kelime listesi => (programiz)
Yukarıdaki program @SuppressWarnings("unchecked")
açıklama kullanılmadan derlenirse , derleyici yine de programı derler ancak aşağıdaki gibi uyarılar verir:
Main.java, denetlenmemiş veya güvenli olmayan işlemler kullanır. Kelime listesi => (programiz)
Uyarıyı alıyoruz
Main.java, denetlenmemiş veya güvenli olmayan işlemler kullanır
Aşağıdaki ifade nedeniyle.
ArrayList wordList = new ArrayList();
This is because we haven't defined the generic type of the array list. We can fix this warning by specifying generics inside angle brackets .
ArrayList wordList = new ArrayList();
2. Type annotations
Before Java 8, annotations could be applied to declarations only. Now, type annotations can be used as well. This means that we can place annotations wherever we use a type.
Constructor invocations
new @Readonly ArrayList()
Type definitions
@NonNull String str;
This declaration specifies non-null variable str of type String
to avoid NullPointerException
.
@NonNull List newList;
This declaration specifies a non-null list of type String
.
List newList;
This declaration specifies a list of non-null values of type String
.
Type casts
newStr = (@NonNull String) str;
extends and implements clause
class Warning extends @Localized Message
throws clause
public String readMethod() throws @Localized IOException
Type annotations enable Java code to be analyzed better and provide even stronger type checks.
Types of Annotations
1. Predefined annotations
@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
2. Meta-annotations
@Retention
@Documented
@Target
@Inherited
@Repeatable
3. Custom annotations
These annotation types are described in detail in the Java Annotation Types tutorial.
Use of Annotations
- Compiler instructions - Annotations can be used for giving instructions to the compiler, detect errors or suppress warnings. The built-in annotations
@Deprecated
,@Override
,@SuppressWarnings
are used for these purposes. - Compile-time instructions - Compile-time instructions provided by these annotations help the software build tools to generate code, XML files and many more.
- Çalışma zamanı talimatları - Bazı ek açıklamalar, programa çalışma zamanında talimatlar vermek için tanımlanabilir. Bu notlara Java Reflection kullanılarak erişilir.