Muszę uzyskać wartość pola za pomocą odbicia. Tak się składa, że nie zawsze jestem pewien, jaki jest typ danych pola. W tym celu i aby uniknąć powielania kodu, stworzyłem następującą metodę:
@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;
}
I użyj tej metody jak:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
lub
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Problem polega na tym, że nie mogę przesyłać Integer
do Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Czy jest lepszy sposób na osiągnięcie tego?
Używam Java 1.6.
Number[]
i pętli nad nią, aby utworzyć odpowiednio wpisaną tablicę, prawda?