Ing taun 2005, kanthi teka Java 5, kita dadi ngerti entitas anyar sing diarani anotasi.

Anotasi minangka wangun khusus metadata sintaksis sing bisa diumumake ing kode. Iki digunakake kanggo nganalisa kode nalika kompilasi utawa nalika runtime. Sampeyan bisa nganggep anotasi minangka label, tag, utawa petunjuk kompiler.

Sampeyan mbokmenawa wis nemokake anotasi sadurunge. Contone, nalika overriding cara saka kelas induk, kita nulis @Override sadurunge cara dhewe. Anotasi iki nuduhake yen metode wong tuwa bakal ditimpa ing kelas anak.

Sintaksis:


@Override
public int hashCode() {
      return super.hashCode();
}

Aku pengin langsung nyathet yen anotasi ora mung ditrapake kanggo metode. Iki digunakake karo paket, kelas, metode, kolom lan paramèter.

Kanggo ngerti cara kerja anotasi, ayo padha ngerti konsep antarmuka panandha. Wiwit tekane Jawa, pangembang tansah mbutuhake cara kanggo menehi tandha kelas supaya bisa nindakake tumindak tartamtu.

Sadurunge Java 5, padha nggunakake antarmuka sing ora nindakake apa sing dikarepake antarmuka. Ora ana cara lan ora ana kontrak. Iku mung nandhani kelas minangka khusus ing sawetara cara.

Antarmuka kasebut diarani antarmuka panandha. Saka jeneng sampeyan bisa ngira manawa tujuane kanggo menehi tandha kelas kanggo JVM, compiler, utawa sawetara perpustakaan. Sawetara antarmuka panandha, kayata Serializable , tetep. Antarmuka panandha iki ngidini kita nunjukake yen kedadeyan kelas bisa serial.

Kaya sing wis dingerteni, antarmuka panandha terus urip sanajan ana anotasi.

Anotasi versus antarmuka panandha:


@MyAnnotation
public class MyClass {}

public class MyClass implements MarkerInterface {}

Loro-lorone pendekatan kasebut nduweni tujuan sing padha, nanging ana bedane sing jelas ing implementasine. Contone, nimbang antarmuka lan anotasi sing nuduhake yen kelas kalebu jinis tartamtu.

Yen kita nggunakake antarmuka, banjur kita menehi tandha kelas. Yen kita nggunakake salah lan ana kesalahan, banjur kita bakal nemokake masalah ing kompilasi lan program ora bakal mbukak.

Kanthi anotasi, kabeh ora gampang banget: ing kene kesalahan bakal dideteksi nalika runtime, sing tegese program bakal diwiwiti, nanging ora kaget, ora bakal rampung.

Elinga yen kita kudu menehi tandha kelas kanggo panggunaan ing mangsa ngarep, conto kasebut kudu diterusake menyang metode tartamtu:


public class MyInteger implements Sum {}
interface Sum {};

public static void main(String[] args) throws IOException {
        increase(new MyInteger());
}
 
public static void increase(Sum count) {
        // TODO
}

Antarmuka panandha paling apik ing kene.

Paling apik nggunakake anotasi nalika kita butuh liyane, kayata paramèter sing didhukung anotasi.

Ayo katon ing anotasi standar ing JDK:

Anotasi Katrangan Tuladha
@Nganti Nemtokake manawa sawijining metode ngatasi metode superclass utawa ngetrapake metode kelas utawa antarmuka abstrak.

@Override
public int hashCode() {
        return super.hashCode();
}
@Dibuwang Tandhani kode minangka ora digunakake.

@Deprecated
public abstract void method();
@SuppressWarnings Mateni bebaya compiler kanggo unsur anotasi. Elinga yen sampeyan kudu mateni macem-macem kategori bebaya, padha kudu dilampirake ing kurung kriting, contone @SuppressWarnings({"nonchecked", "cast"}) .

public class DocumentsFolder {
   private List documents;

   @SuppressWarnings("unchecked")
public void addDocument(String document) {
            documents.add(document);
   }
}

Ing conto iki, kita nyoba nambah menyang dhaptar sing ora duwe jinis sing ditetepake (jinis umum). Compiler bakal ngelingake kita babagan iki. Iki migunani banget, nanging kadhangkala ana akeh banget "peringatan" lan bisa rame. Sampeyan bisa nggunakake anotasi metode iki lan nemtokake jinis bebaya kompiler minangka argumen. Ana akeh spidol, mula aja kuwatir ngelingi kabeh - IDEA biasane bakal menehi pitutur marang sampeyan sing kudu ditambahake.

Conto liyane kanthi pirang-pirang argumen:


@SuppressWarnings({"unchecked", "deprecated"})