Мне нужно получить значение поля, используя отражение. Так получилось, что я не всегда уверен, что такое тип данных поля. Для этого, и чтобы избежать дублирования кода, я создал следующий метод:
@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;
}
И используйте этот метод, например:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
или
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Проблема в том, что я не могу отличить Integer
от Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Есть ли лучший способ достичь этого?
Я использую Java 1.6.