Katakanlah saya punya kelas:
public class R {
public static final int _1st = 0x334455;
}
Bagaimana saya bisa mendapatkan nilai "_1st" melalui refleksi?
java
reflection
static
final
Viet
sumber
sumber
R._1st
tidak bisa bekerja? Jika Anda berbicara tentang pengembangan Android, saya pikirR
kelasnya selalu ada ...BR
kelas.Jawaban:
Pertama-tama ambil properti bidang kelas, lalu Anda dapat mengambil nilainya. Jika Anda mengetahui jenisnya, Anda dapat menggunakan salah satu metode get dengan null (hanya untuk kolom statis, sebenarnya dengan kolom statis argumen yang diteruskan ke metode get diabaikan seluruhnya). Jika tidak, Anda dapat menggunakan getType dan menulis sakelar yang sesuai seperti di bawah ini:
sumber
getInt()
mengabaikan argumen yang disampaikan? Menghabiskan waktu berjam-jam untuk mencoba membuat instance kelas lulus di sana.Penanganan pengecualian dibiarkan sebagai latihan bagi pembaca.
Pada dasarnya Anda mendapatkan bidang seperti yang lain melalui refleksi, tetapi ketika Anda memanggil metode get, Anda mengirimkan null karena tidak ada contoh untuk ditindaklanjuti.
Ini berfungsi untuk semua bidang statis, terlepas dari finalnya. Jika kolomnya bukan untuk publik, Anda perlu memanggilnya
setAccessible(true)
terlebih dahulu, dan tentu saja SecurityManager harus mengizinkan semua ini.sumber
Saya mengikuti rute yang sama (melihat melalui kelas R yang dihasilkan) dan kemudian saya memiliki perasaan buruk ini mungkin fungsi di kelas Sumber Daya. Saya benar.
Ketemu ini: Resources :: getIdentifier
Pikir itu mungkin menghemat waktu orang. Meskipun mereka mengatakan itu berkecil hati di dokumen, itu tidak terlalu mengejutkan.
sumber