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.
Number[]
dan loop di atasnya untuk membuat array yang diketik dengan tepat, bukan?