我有一个初始化的对象:
Object obj = new Object(){
final String type = "java.lang.Integer";
final Object value = 6;
};
我想重新创建这个对象:
Integer i = 6;
有什么方法可以获取obj对象的类型字段并使用反射创建一个新实例并将其中的值提供给它?
编辑:在扩展这个问题后,我发现如果我将对象存储在文件中并使用Jackson使用以下文件从文件中检索它:
Reader reader = new Reader();
MyClass[] instances = reader.readValue(fileName);
而MyClass定义为:
class MyClass{
List
现在我正在迭代字段并使用代码将它们转换为适当的对象:
public static Class> getTypeForObject(Object field) {
Field returnType = null;
try {
returnType = field.getClass().getDeclaredField("type");
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return returnType.getType();
}
public static Object getValueForObject(Object field) {
Object obj = null;
try {
obj = field.getClass().getDeclaredField("value").get(field);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
return obj;
}
但是当我观察表达式field.getClass()时,它给了我LinkedHashMap作为它的类.我很困惑为什么,如果它被内部对待为Map,如果我想用反射做而不使用具体的数据结构,那么我将剩下哪些选项,以便一切都是通用的.
最佳答案
这将从您的对象中检索类型字段的值:obj.getClass().getDeclaredField(“type”).get(obj);.