ini kode saya:
@Column(columnName="firstname")
private String firstName;
@Column(columnName="lastname")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
apakah mungkin untuk membaca nilai dari penjelasan saya @column ( columnName = "XYZ123") di kelas lain?
Myclass.class.getDeclaredFields()
untuk mendapatkan bidang pribadiTentu saja. Berikut ini contoh anotasi:
Dan contoh metode beranotasi:
Dan metode sampel di kelas lain yang mencetak nilai testText:
Tidak jauh berbeda untuk anotasi bidang seperti milik Anda.
Cheerz!
sumber
Saya belum pernah melakukannya, tetapi sepertinya Refleksi menyediakan ini.
Field
adalahAnnotatedElement
dan begitulah adanyagetAnnotation
. Halaman ini memiliki contoh (disalin di bawah); cukup mudah jika Anda mengetahui kelas anotasi dan jika kebijakan anotasi mempertahankan anotasi pada waktu proses. Biasanya jika kebijakan penyimpanan tidak menyimpan anotasi pada waktu proses, Anda tidak akan dapat menanyakannya pada waktu proses.Jawaban yang telah dihapus (?) Memberikan tautan yang berguna ke tutorial anotasi yang mungkin berguna bagi Anda; Saya telah menyalin tautan di sini sehingga orang dapat menggunakannya.
Contoh dari halaman ini :
sumber
Menguraikan jawaban @Cephalopod, jika Anda ingin semua nama kolom dalam daftar, Anda dapat menggunakan oneliner ini:
sumber
Sementara semua jawaban yang diberikan sejauh ini benar-benar valid, kita juga harus mengingat perpustakaan refleksi google untuk pendekatan yang lebih umum dan mudah untuk pemindaian anotasi, mis.
sumber
Anda juga dapat menggunakan tipe generik, dalam kasus saya, dengan mempertimbangkan semua yang dikatakan sebelum Anda dapat melakukan sesuatu seperti:
Ingat, bahwa ini tidak akan setara 100% dengan SomeClass.class.get (...) ();
Tapi bisa melakukan trik ...
sumber
Dalam kasus umum, Anda memiliki akses pribadi untuk bidang, jadi Anda TIDAK DAPAT menggunakan getFields dalam refleksi. Sebagai gantinya, Anda harus menggunakan getDeclaredFields
Jadi, pertama-tama, Anda harus waspada jika anotasi Kolom Anda memiliki retensi waktu proses:
Setelah itu Anda bisa melakukan sesuatu seperti ini:
Jelas, Anda ingin melakukan sesuatu dengan bidang - setel nilai baru menggunakan nilai anotasi:
Jadi, kode lengkapnya bisa terlihat seperti ini:
sumber
Untuk beberapa orang yang meminta metode umum, ini akan membantu Anda (5 tahun kemudian: p).
Untuk contoh saya di bawah ini, saya menarik nilai URL RequestMapping dari metode yang memiliki anotasi RequestMapping. Untuk menyesuaikan ini untuk bidang, cukup ubah
untuk
Dan tukar penggunaan RequestMapping dengan anotasi apa pun yang ingin Anda baca. Namun pastikan anotasi tersebut memiliki @Retention (RetentionPolicy.RUNTIME) .
sumber
salah satu cara saya menggunakannya:
sumber