Saya menjelajahi anotasi dan sampai pada titik di mana beberapa anotasi tampaknya memiliki hierarki di antara anotasi tersebut.
Saya menggunakan anotasi untuk menghasilkan kode di latar belakang untuk Kartu. Ada berbagai jenis Kartu (dengan demikian kode dan anotasi berbeda) tetapi ada elemen tertentu yang umum di antara mereka seperti nama.
@Target(value = {ElementType.TYPE})
public @interface Move extends Page{
String method1();
String method2();
}
Dan ini akan menjadi Anotasi yang umum:
@Target(value = {ElementType.TYPE})
public @interface Page{
String method3();
}
Dalam contoh di atas saya berharap Pindah ke mewarisi method3 tetapi saya mendapat peringatan yang mengatakan bahwa meluas tidak valid dengan anotasi. Saya mencoba agar Anotasi memperluas basis yang sama tetapi tidak berhasil. Apakah itu mungkin atau hanya masalah desain?
java
inheritance
annotations
javydreamercsw.dll
sumber
sumber
Jawaban:
Sayangnya tidak ada. Rupanya ini ada hubungannya dengan program yang membaca anotasi di kelas tanpa memuatnya sepenuhnya. Lihat Mengapa tidak mungkin memperluas anotasi di Java?
Namun, tipe mewarisi anotasi superkelasnya jika anotasi tersebut adalah
@Inherited
.Selain itu, kecuali Anda memerlukan metode tersebut untuk berinteraksi, Anda bisa menumpuk anotasi di kelas Anda:
Apakah ada alasan yang tidak berhasil untuk Anda?
sumber
Anda dapat membuat anotasi anotasi Anda dengan anotasi dasar, bukan dengan pewarisan. Ini digunakan dalam kerangka Spring .
Memberi contoh
Anda kemudian dapat memeriksa apakah sebuah kelas dianotasi
Vehicle
menggunakan Spring's AnnotationUtils :Metode ini diimplementasikan sebagai:
AnnotationUtils
juga berisi metode tambahan untuk mencari penjelasan tentang metode dan elemen beranotasi lainnya. Kelas Spring juga cukup kuat untuk mencari melalui metode bridged, proxy, dan kasus sudut lainnya, terutama yang ditemui di Spring.sumber
TYPE
atauANNOTATION_TYPE
.Selain jawaban Grygoriys tentang anotasi anotasi.
Anda dapat memeriksa misalnya metode untuk memuat
@Qualifier
anotasi (atau anotasi dengan anotasi@Qualifier
) oleh loop ini:Apa yang pada dasarnya Anda lakukan, adalah menampilkan semua anotasi pada metode dan dari anotasi tersebut Anda mendapatkan jenisnya dan memeriksa jenis tersebut jika dianotasi dengan @Qualifier. Anotasi Anda harus Target.Annotation_type diaktifkan juga agar ini berfungsi.
sumber
Lihat https://github.com/blindpirate/annotation-magic , yang merupakan perpustakaan yang saya kembangkan ketika saya memiliki pertanyaan yang sama.
sumber