リフレクションを使用してフィールドの値を取得する必要があります。たまたま、フィールドのデータ型が何であるかが常にわかりません。そのため、またコードの重複を避けるために、次のメソッドを作成しました。
@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を使用しています。
Number[]
とそのループを使用して、適切に型指定された配列を作成できます。