Saya telah menggunakan AOP Guice untuk mencegat beberapa panggilan metode. Kelas saya mengimplementasikan antarmuka dan saya ingin memberi anotasi pada metode antarmuka sehingga Guice dapat memilih metode yang tepat. Bahkan jika penjelasan jenis ini dijelaskan dengan warisan penjelasan menerapkan kelas tidak mewarisi penjelasan sebagaimana tercantum dalam warisan ini doc java:
Perhatikan juga bahwa meta-annotation ini hanya menyebabkan anotasi diwarisi dari superclass; penjelasan pada antarmuka yang diterapkan tidak berpengaruh.
Apa alasannya? Mengenal semua antarmuka yang diterapkan kelas objek saat runtime bukanlah hal yang sulit untuk dilakukan, jadi harus ada alasan bagus di balik keputusan ini.
sumber
The field value is ambiguous.
kesalahan kompiler -seperti halnya dengan dua antarmuka yang menyatakan konstanta yang sama dengan nilai yang berbeda. Saya tahu ini bukan kolom, tetapi nilai anotasi diselesaikan pada waktu kompilasi, bukan? Fitur yang kami lewatkan di sini akan sangat membantu dalam banyak kasus. Maaf tentang menghidupkan kembali posting lama, omong-omong :).Foo
anotasi (MyClass
tidak ada, kemudian Antarmuka dicari dan diambil dalam urutan setelahnyaimplements
) dan oleh karena itu mencetak "baz". Keren.Dari Javadoc untuk @Inherited:
Di sisi lain, validator JSR 305 melakukan semacam pencarian warisan. Jika Anda memiliki hierarki kelas:
Kemudian validasi efektif pada
Student.getAge()
are@Nonnull @Min(5)
.@Nonnull
tidak memiliki@Inherited
meta-annotation.sumber
@Inherited
tidak berpengaruh pada apa pun selain kelas