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 cette raison, et pour éviter la duplication du 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 utiliser cette méthode comme :
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
ou
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Le problème, c'est que je n'arrive pas à lancer Integer
à Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Existe-t-il un meilleur moyen d'y parvenir ?
J'utilise Java 1.6.