Hari ini saya ingin membuat antarmuka anotasi pertama saya setelah dokumentasi ini dan saya mendapat kesalahan kompilator ini
Invalid type for annotation member": public @interface MyAnnotation { Object myParameter; ^^^^^^ }
Jelas Object
tidak dapat digunakan sebagai jenis anggota penjelasan. Sayangnya saya tidak dapat menemukan informasi tentang jenis apa yang dapat digunakan secara umum.
Ini saya temukan menggunakan trial-and-error:
String
→ Validint
→ ValidInteger
→ Tidak Valid (Mengejutkan)String[]
→ Valid (Mengejutkan)Object
→ Tidak Valid
Mungkin seseorang dapat menjelaskan jenis mana yang benar-benar diperbolehkan dan mengapa.
java
annotations
Daniel Rikowski
sumber
sumber
Jawaban:
Ini ditentukan oleh bagian 9.6.1 dari JLS . Jenis anggota penjelasan harus salah satu dari:
Tampaknya memang membatasi, tetapi tidak diragukan lagi ada alasan untuk itu.
Perhatikan juga bahwa array multidimensi (mis.
String[][]
) Secara implisit dilarang oleh aturan di atas.Susunan Kelas tidak diizinkan seperti yang dijelaskan dalam jawaban ini .
sumber
Saya setuju dengan Skaffman untuk Jenis yang tersedia.
Pembatasan tambahan: harus berupa konstanta waktu kompilasi .
Misalnya, berikut ini dilarang:
sumber
Juga jangan lupa bahwa anotasi itu sendiri dapat menjadi bagian dari definisi anotasi . Ini memungkinkan beberapa anotasi penjelasan sederhana - berguna dalam kasus di mana Anda ingin memiliki satu anotasi hadir berkali-kali.
Sebagai contoh:
di mana
SimpleAnnotation
adalahdan
ComplexAnnotation
adalahContoh diambil dari: http://web.archive.org/web/20131216093805/https://blogs.oracle.com/toddfast/entry/creating_nested_complex_java_annotations
(URL asli: https://blogs.oracle.com/toddfast/entry/creating_nested_complex_java_annotations )
sumber
@Repeatable
, ini tidak diperlukan lagi.Konsep anotasi sangat cocok dengan desain proyek saya, sampai saya menyadari Anda tidak dapat memiliki tipe data kompleks dalam anotasi. Saya mengatasinya dengan menggunakan kelas apa yang ingin saya instantiate daripada objek instantiated kelas itu. Itu tidak sempurna, tetapi java jarang.
sumber