मुझे प्रतिबिंब का उपयोग करके किसी क्षेत्र का मान प्राप्त करने की आवश्यकता है। ऐसा होता है कि मैं हमेशा निश्चित नहीं हूं कि क्षेत्र का डेटाटाइप क्या है। उसके लिए, और कुछ कोड दोहराव से बचने के लिए मैंने निम्नलिखित विधि बनाई है:
@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
क्या इसे प्राप्त करने का एक बेहतर तरीका है?
मैं जावा 1.6 का उपयोग कर रहा हूं।
Number[]
उचित रूप से टाइप की गई सरणी बनाने के लिए इस पर एक और एक लूप का उपयोग कर सकता हूं , है ना?