Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Jenis Anotasi Java

Jenis Anotasi Java

Dalam tutorial ini, kita akan belajar tentang berbagai jenis anotasi Java dengan bantuan contoh.

Anotasi Java adalah metadata (data tentang data) untuk kode sumber program kami. Ada beberapa anotasi standar yang disediakan oleh Java SE. Selain itu, kami juga dapat membuat anotasi khusus sesuai kebutuhan kami.

Jika Anda tidak tahu apa itu anotasi, kunjungi tutorial anotasi Java.

Anotasi ini dapat dikategorikan sebagai:

1. Anotasi standar

2. Anotasi khusus

3. Anotasi meta


Jenis Anotasi Standar

1. @Usang

@Deprecated anotasi adalah anotasi penanda yang menunjukkan bahwa elemen (kelas, metode, bidang, dll) tidak digunakan lagi dan telah digantikan oleh elemen yang lebih baru.

Sintaksnya adalah:

@Deprecated
accessModifier returnType deprecatedMethodName() { ... }

Ketika sebuah program menggunakan elemen yang telah dinyatakan tidak digunakan lagi, kompilator akan mengeluarkan peringatan.

Kami menggunakan Javadoc @deprecated tag untuk mendokumentasikan elemen yang tidak digunakan lagi.

/**
 * @deprecated
 * why it was deprecated
 */
@Deprecated
accessModifier returnType deprecatedMethodName() { ... }

Contoh 1:@Contoh anotasi yang tidak digunakan lagi

class Main {
  /**
   * @deprecated
   * This method is deprecated and has been replaced by newMethod()
   */
  @Deprecated
  public static void deprecatedMethod() { 
    System.out.println("Deprecated method"); 
  } 

  public static void main(String args[]) {
    deprecatedMethod();
  }
}

Keluaran

Deprecated method

2. @Ganti

@Override anotasi menetapkan bahwa metode subkelas menimpa metode superkelas dengan nama metode, tipe kembalian, dan daftar parameter yang sama.

Tidak wajib menggunakan @Override saat mengganti metode. Namun, jika kita menggunakannya, kompilator memberikan kesalahan jika ada yang salah (seperti tipe parameter yang salah) saat mengganti metode.

Contoh 2:@Override contoh anotasi

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){
    display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Keluaran

I am a dog

Dalam contoh ini, dengan membuat objek dog1 dari Anjing kelas, kita dapat memanggil metodenya printMessage() yang kemudian mengeksekusi display() pernyataan.

Sejak display() didefinisikan di kedua kelas, metode subkelas Anjing menimpa metode superclass Hewan . Oleh karena itu, display() dari subkelas disebut.


3. @SuppressWarnings

Seperti namanya, @SuppressWarnings anotasi menginstruksikan kompiler untuk menekan peringatan yang dihasilkan saat program dijalankan.

Kita dapat menentukan jenis peringatan yang akan ditekan. Peringatan yang dapat ditekan adalah khusus kompiler tetapi ada dua kategori peringatan:penghentian dan tidak dicentang .

Untuk menekan kategori peringatan tertentu, kami menggunakan:

@SuppressWarnings("warningCategory")

Misalnya,

@SuppressWarnings("deprecated")

Untuk menekan beberapa kategori peringatan, kami menggunakan:

@SuppressWarnings({"warningCategory1", "warningCategory2"})

Misalnya,

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

Kategori deprecated menginstruksikan kompiler untuk menekan peringatan saat kita menggunakan elemen yang tidak digunakan lagi.

Kategori unchecked menginstruksikan kompiler untuk menekan peringatan saat kita menggunakan tipe mentah.

Dan, peringatan yang tidak ditentukan diabaikan. Misalnya,

@SuppressWarnings("someundefinedwarning")

Contoh 3:Contoh anotasi @SuppressWarnings

class Main {
  @Deprecated
  public static void deprecatedMethod() { 
    System.out.println("Deprecated method"); 
  } 
  
  @SuppressWarnings("deprecated")
  public static void main(String args[]) {
    Main depObj = new Main();
    depObj. deprecatedMethod();
  }
}

Keluaran

Deprecated method

Di sini, deprecatedMethod() telah ditandai sebagai usang dan akan memberikan peringatan kompiler saat digunakan. Dengan menggunakan @SuppressWarnings("deprecated") anotasi, kita dapat menghindari peringatan compiler.


4. @SafeVarargs

@SafeVarargs anotasi menegaskan bahwa metode atau konstruktor beranotasi tidak melakukan operasi yang tidak aman pada varargsnya (jumlah argumen yang bervariasi).

Kami hanya dapat menggunakan anotasi ini pada metode atau konstruktor yang tidak dapat diganti. Ini karena metode yang menggantikannya mungkin melakukan operasi yang tidak aman.

Sebelum Java 9, kita dapat menggunakan anotasi ini hanya pada metode final atau statis karena tidak dapat diganti. Kami sekarang dapat menggunakan anotasi ini untuk metode pribadi juga.

Contoh 4:contoh anotasi @SafeVarargs

import java.util.*;

class Main {

  private void displayList(List<String>... lists) {
    for (List<String> list : lists) {
      System.out.println(list);
    }
  }

  public static void main(String args[]) {
    Main obj = new Main();

    List<String> universityList = Arrays.asList("Tribhuvan University", "Kathmandu University");
    obj.displayList(universityList);

    List<String> programmingLanguages = Arrays.asList("Java", "C");
    obj.displayList(universityList, programmingLanguages);
  }
}

Peringatan

Type safety: Potential heap pollution via varargs parameter lists
Type safety: A generic array of List<String> is created for a varargs 
 parameter

Keluaran

Note: Main.java uses unchecked or unsafe operations.
[Tribhuvan University, Kathmandu University]
[Tribhuvan University, Kathmandu University]
[Java, C]

Di sini, List ... lists menentukan argumen panjang variabel dengan tipe List . Ini berarti bahwa metode displayList() dapat memiliki nol atau lebih argumen.

Program di atas dikompilasi tanpa kesalahan tetapi memberikan peringatan ketika @SafeVarargs anotasi tidak digunakan.

Saat kita menggunakan @SafeVarargs anotasi pada contoh di atas,

@SafeVarargs
 private void displayList(List<String>... lists) { ... }

Kami mendapatkan output yang sama tetapi tanpa peringatan apa pun. Peringatan yang tidak dicentang juga disembunyikan saat kami menggunakan anotasi ini.


5. @FunctionalInterface

Java 8 pertama kali memperkenalkan @FunctionalInterface . ini anotasi. Anotasi ini menunjukkan bahwa deklarasi tipe yang digunakan adalah antarmuka fungsional. Antarmuka fungsional hanya dapat memiliki satu metode abstrak.

Contoh 5:@FunctionalInterface contoh anotasi

@FunctionalInterface
public interface MyFuncInterface{
  public void firstMethod(); // this is an abstract method
}

Jika kita menambahkan metode abstrak lain, misalkan

@FunctionalInterface
public interface MyFuncInterface{
  public void firstMethod(); // this is an abstract method
  public void secondMethod(); // this throws compile error
}

Sekarang, ketika kita menjalankan program, kita akan mendapatkan peringatan berikut:

Unexpected @FunctionalInterface annotation
@FunctionalInterface ^ MyFuncInterface is not a functional interface
multiple non-overriding abstract methods found in interface MyFuncInterface

Tidak wajib menggunakan @FunctionalInterface anotasi. Kompilator akan mempertimbangkan antarmuka apa pun yang memenuhi definisi antarmuka fungsional sebagai antarmuka fungsional.

Kami menggunakan anotasi ini untuk memastikan bahwa antarmuka fungsional hanya memiliki satu metode abstrak.

Namun, ia dapat memiliki sejumlah metode default dan statis karena memiliki implementasi.

@FunctionalInterface
public interface MyFuncInterface{
  public void firstMethod(); // this is an abstract method
  default void secondMethod() { ... } 
  default void thirdMethod() { ... } 
}

Anotasi Khusus

Dimungkinkan juga untuk membuat anotasi khusus kita sendiri.

Sintaksnya adalah:

[Access Specifier] @interface<AnnotationName> {         
  DataType <Method Name>() [default value];
}

Inilah yang perlu Anda ketahui tentang anotasi khusus:

Contoh 6:Contoh anotasi khusus

@interface MyCustomAnnotation {
  String value() default "default value";
}

class Main {
  @MyCustomAnnotation(value = "programiz")
  public void method1() {
    System.out.println("Test method 1");
  }

  public static void main(String[] args) throws Exception {
    Main obj = new Main();
    obj.method1();
  }
}

Keluaran

Test method 1

Anotasi Meta

Meta-anotasi adalah anotasi yang diterapkan ke anotasi lain.

1. @Retensi

@Retention anotasi menentukan tingkat ketersediaan anotasi.

Sintaksnya adalah:

@Retention(RetentionPolicy)

Ada 3 jenis kebijakan retensi:

Misalnya,

@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation{ ... }

2. @Dokumentasi

Secara default, anotasi khusus tidak disertakan dalam dokumentasi Java resmi. Untuk menyertakan anotasi kami dalam dokumentasi Javadoc, kami menggunakan @Documented anotasi.

Misalnya,

@Documented
public @interface MyCustomAnnotation{ ... }

3. @Target

Kami dapat membatasi anotasi untuk diterapkan ke target tertentu menggunakan @Target anotasi.

Sintaksnya adalah:

@Target(ElementType)

ElementType dapat memiliki salah satu jenis berikut:

Jenis Elemen Target
ElementType.ANNOTATION_TYPE Jenis anotasi
ElementType.CONSTRUCTOR Konstruktor
ElementType.FIELD Bidang
ElementType.LOCAL_VARIABLE Variabel lokal
ElementType.METHOD Metode
ElementType.PACKAGE Paket
ElementType.PARAMETER Parameter
ElementType.TYPE Elemen kelas apa saja

Misalnya,

@Target(ElementType.METHOD)
public @interface MyCustomAnnotation{ ... }

Dalam contoh ini, kami telah membatasi penggunaan anotasi ini hanya untuk metode.

Catatan: Jika jenis target tidak ditentukan, anotasi dapat digunakan untuk elemen apa pun.


4. @Diwarisi

Secara default, tipe anotasi tidak dapat diwarisi dari superclass. Namun, jika kita perlu mewarisi anotasi dari superclass ke subclass, kita menggunakan @Inherited anotasi.

Sintaksnya adalah:

@Inherited

Misalnya,

@Inherited
public @interface MyCustomAnnotation { ... }

@MyCustomAnnotation
public class ParentClass{ ... }

public class ChildClass extends ParentClass { ... }

5. @Berulang

Anotasi yang telah ditandai dengan @Repeatable dapat diterapkan beberapa kali ke deklarasi yang sama.

@Repeatable(Universities.class)
public @interface University {
  String name();
}

Nilai yang ditentukan dalam @Repeatable anotasi adalah anotasi wadah. Anotasi penampung memiliki variabel nilai jenis array dari anotasi berulang di atas. Di sini, Universities adalah jenis anotasi yang berisi.

public @interface Universities {
  University[] value();
}

Sekarang, @University anotasi dapat digunakan beberapa kali pada deklarasi yang sama.

@University(name = "TU")
@University(name = "KU")
private String uniName;

Jika kita perlu mengambil data anotasi, kita dapat menggunakan API Refleksi.

Untuk mengambil nilai anotasi, kami menggunakan getAnnotationsByType() atau getAnnotations() metode yang ditentukan dalam API Refleksi.


java

  1. Tipe Data Java (Primitif)
  2. Operator Jawa
  3. Antarmuka Jawa
  4. Java mencoba-dengan-sumber daya
  5. Anotasi Jawa
  6. Jenis Anotasi Java
  7. Metode Java String charAt() dengan Contoh
  8. Java String EndsWith() Metode dengan Contoh
  9. Java String replace(), replaceAll() dan replaceFirst() metode
  10. Java - Tipe Variabel