Tôi cần lấy giá trị của một trường bằng cách sử dụng phản xạ. Điều đó xảy ra là tôi không phải lúc nào cũng chắc chắn kiểu dữ liệu của trường là gì. Vì vậy, và để tránh một số mã trùng lặp, tôi đã tạo phương pháp sau:
@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;
}
Và sử dụng phương pháp này như:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
hoặc là
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Vấn đề là tôi dường như không thể truyền Integer
đến Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Có cách nào tốt hơn để đạt được điều này không?
Tôi đang sử dụng Java 1.6.
Number[]
và một vòng lặp trên nó để tạo một mảng được định kiểu thích hợp, phải không?