Saya perlu mendapatkan nilai bidang menggunakan refleksi. Kebetulan saya tidak selalu yakin apa tipe data dari bidang itu. Untuk itu, dan untuk menghindari beberapa duplikasi kode, saya telah membuat metode berikut:
@SuppressWarnings("unchecked")
private static <T> T getValueByReflection(VarInfo var, Class<?> classUnderTest, Object runtimeInstance) throws Throwable {
Field f = classUnderTest.getDeclaredField(processFieldName(var));
f.setAccessible(true);
T value = (T) f.get(runtimeInstance);
return value;
}
Dan gunakan metode ini seperti:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
atau
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Masalahnya adalah saya tidak bisa melakukan cast Integer
ke Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Adakah cara yang lebih baik untuk mencapai ini?
Saya menggunakan Java 1.6.
java
reflection
casting
Tiago Veloso
sumber
sumber
Number[]
dan loop di atasnya untuk membuat array yang diketik dengan tepat, bukan?double[]
misalnya, tetapi akan bekerja untukDouble[]
.Number
. Atau dengan kata lain: yang konversi aturan yang Anda percaya tidak membiarkan Anda mengkonversi dari satu ke yang lain?Secara sederhana:
sumber
int
nilai - nilai.Integer
keint
dan kemudian mentransmisikan kelong
sebelum meneruskan keLong(long)
konstruktor yang sekarang sudah tidak digunakan lagi .Ini untuk menghindari kinerja hit dari konversi ke String. The
longValue()
metode dalam Integer hanya cast dari nilai int. TheLong.valueOf()
Metode memberikan vm kesempatan untuk menggunakan nilai cache.sumber
Anehnya saya menemukan bahwa jika Anda mengurai dari string itu berhasil.
Menang.
sumber
Mengubah Integer menjadi Panjang Sangat Sederhana dan banyak cara untuk mengubah
Contoh 1 itu
Contoh 2
Contoh 3
Contoh 4
Jika Anda sudah memiliki int yang diketik sebagai Integer, Anda dapat melakukan ini:
sumber
Ubah bilangan bulat langsung menjadi panjang dengan menambahkan 'L' di akhir bilangan bulat.
sumber
Jika Integer tidak null
i
akan secara otomatis typecast ke along
.Menggunakan
valueOf
alih-alihnew
mengizinkan caching nilai ini (jika kecil) oleh kompilator atau JVM, menghasilkan kode yang lebih cepat.sumber
sumber
Jika Anda tahu bahwa Integer bukan NULL, Anda dapat melakukan ini:
sumber
atau
sumber
Parser dari
int
variabel kelong
tipe disertakan diInteger
kelas. Berikut ini contohnya:Anda dapat dengan mudah menggunakan fungsi bawaan ini untuk membuat metode yang mem-parsing dari
int
menjadilong
:sumber
Ini tidak aman
sumber
Jika Anda tidak mengetahui kelas pasti dari bilangan Anda ( Integer , Long , Double , apa pun), Anda dapat mentransmisikan ke Number dan mendapatkan nilai panjang Anda darinya:
sumber
Dalam kasus Jenis Daftar Panjang, Menambahkan L ke akhir setiap nilai Integer
sumber
Cobalah untuk mengubah Nilai oleh Jackson
sumber