Rumah  >  Artikel  >  Java  >  Bagaimanakah Saya Boleh Mengakses Nilai Anotasi dalam Kelas Berbeza di Java?

Bagaimanakah Saya Boleh Mengakses Nilai Anotasi dalam Kelas Berbeza di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 21:34:03114semak imbas

How Can I Access Annotation Values in a Different Class in Java?

Mengakses Nilai Anotasi dalam Java

Anotasi ialah mekanisme berkuasa dalam Java untuk menambahkan metadata pada kelas, kaedah dan medan. Anotasi ini boleh diakses dan digunakan pada masa jalan untuk mengubah suai tingkah laku kod beranotasi. Satu soalan biasa yang timbul ialah sama ada nilai anotasi boleh dibaca dalam kelas yang berbeza.

Jawapan kepada soalan ini ialah ya, tetapi ia bergantung pada dasar pengekalan anotasi. Anotasi boleh mempunyai salah satu daripada tiga dasar pengekalan:

  • SUMBER: Anotasi dibuang oleh pengkompil dan tidak tersedia pada masa jalan.
  • KELAS: Anotasi dikekalkan dalam fail kelas tetapi tidak tersedia semasa runtime melalui refleksi.
  • RUNTIME: Anotasi dikekalkan dalam fail kelas dan tersedia semasa runtime melalui refleksi.

Untuk membaca nilai anotasi dalam kelas yang berbeza, anotasi mesti mempunyai dasar pengekalan masa jalan. Untuk menentukan dasar pengekalan masa jalan, gunakan anotasi @Retention diikuti dengan enum RetentionPolicy:

@Retention(RetentionPolicy.RUNTIME)
@interface Column {
    String columnName();
}

Setelah anotasi mempunyai dasar pengekalan masa jalan, anda boleh menggunakan refleksi untuk mengakses nilainya dalam kelas lain:

for (Field f : MyClass.class.getFields()) {
    Column column = f.getAnnotation(Column.class);
    if (column != null) {
        System.out.println(column.columnName());
    }
}

Perhatikan bahawa untuk mengakses medan peribadi, anda perlu menggunakan kaedah getDeclaredFields() dan bukannya getFields():

for (Field f : MyClass.class.getDeclaredFields()) {
    Column column = f.getAnnotation(Column.class);
    if (column != null) {
        System.out.println(column.columnName());
    }
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Nilai Anotasi dalam Kelas Berbeza di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn