J'ai besoin d'obtenir la valeur d'un champ en utilisant la réflexion. Il se trouve que je ne suis pas toujours sûr du type de données du champ. Pour cela, et pour éviter une duplication de code, j'ai créé la méthode suivante:
@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;
}
Et utilisez cette méthode comme:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
ou
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Le problème est que je n'arrive pas à lancer un casting Integer
vers Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Y a-t-il une meilleure façon d'y parvenir?
J'utilise Java 1.6.
Number[]
et une boucle dessus pour créer un tableau correctement typé, non?