Yansıma kullanarak bir alanın değerini elde etmem gerekiyor. Öyle oluyor ki, alanın veri türünün ne olduğundan her zaman emin olamıyorum. Bunun için ve bazı kod kopyalarını önlemek için aşağıdaki yöntemi oluşturdum:
@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;
}
Ve bu yöntemi şu şekilde kullanın:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
veya
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Sorun döküm görünmüyor olmasıdır Integer
için Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Bunu başarmanın daha iyi bir yolu var mı?
Java 1.6 kullanıyorum.
Number[]
için, uygun şekilde yazılmış bir dizi oluşturmak için a ve üzerinde bir döngü kullanabilirim , değil mi?