Ich muss den Wert eines Feldes durch Reflexion ermitteln. Es kommt also vor, dass ich nicht immer sicher bin, welchen Datentyp das Feld hat. Zu diesem Zweck und um eine Vervielfältigung des Codes zu vermeiden, habe ich die folgende Methode erstellt:
@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;
}
Und verwenden Sie diese Methode wie folgt:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
oder
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Das Problem ist , dass ich nicht zu Guss scheinen kann Integer
zu Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Gibt es einen besseren Weg, um dies zu erreichen?
Ich benutze Java 1.6.
Number[]
und eine Schleife darüber verwenden, um ein entsprechend typisiertes Array zu erstellen, oder?