Java 将对象转换为 MyClass
Java cast Object to MyClass
我正在写一个存储管理器。我想从文件读取到对象。示例:
protected Object read(String key) throws Exception{
Path pathReadFrom = Paths.get(getPath(key));
if (!Files.isReadable(pathReadFrom)){
throw new FileNotFoundException();
}
Object object = JSON_MAPPER.readValue(Files.readAllBytes(pathReadFrom), Object.class);
return object;
}
JSON_MAPPER 是 Jackson 的 ObjectMapper。
public MyClass get(String id) throws Exception {
MyClass myClassObject = (MyClass) storeManager.read(id);
return myClassObject;
}
我得到下一个异常:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.pckg.project.dto.MyClass
如何创建通用的 read() 方法?也许我应该设置一个类似于 read() 方法的第二个参数的类型?
如何投射不相关的物体? LinkedHashMap 和 MyClass 以何种方式相关?您需要手动映射它们(或者可能需要类似 AutoMapper for .NET 的帮助)
我想出了一些解决办法:
protected <T> T read(String key, Class<T> valueType) throws Exception{
Path pathReadFrom = Paths.get(getPath(key));
T object = JSON_MAPPER.readValue(Files.readAllBytes(pathReadFrom), valueType);
return object;
}
public MyClass get(String id) throws Exception {
MyClass object = storeManager.read(id, MyClass.class);
return object;
}
它工作正常。
是的,您确实需要指定要使用的正确目标类型:否则 Jackson 不知道您可能想要得到哪种 class -- 您只是告诉它 "create a java.lang.Object
out of JSON" ,它通过使用所谓的 "untyped" 模式愉快地做到了:JSON 对象变成 java.util.Map
s,JSON 数组 java.util.List
s,JSON 字符串常规 Java 字符串等。
所以如果你想让 JSON 绑定到 Class MyClass
,你将传递 MyClass.class
而不是 Object.class
。
我正在写一个存储管理器。我想从文件读取到对象。示例:
protected Object read(String key) throws Exception{
Path pathReadFrom = Paths.get(getPath(key));
if (!Files.isReadable(pathReadFrom)){
throw new FileNotFoundException();
}
Object object = JSON_MAPPER.readValue(Files.readAllBytes(pathReadFrom), Object.class);
return object;
}
JSON_MAPPER 是 Jackson 的 ObjectMapper。
public MyClass get(String id) throws Exception {
MyClass myClassObject = (MyClass) storeManager.read(id);
return myClassObject;
}
我得到下一个异常:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.pckg.project.dto.MyClass
如何创建通用的 read() 方法?也许我应该设置一个类似于 read() 方法的第二个参数的类型?
如何投射不相关的物体? LinkedHashMap 和 MyClass 以何种方式相关?您需要手动映射它们(或者可能需要类似 AutoMapper for .NET 的帮助)
我想出了一些解决办法:
protected <T> T read(String key, Class<T> valueType) throws Exception{
Path pathReadFrom = Paths.get(getPath(key));
T object = JSON_MAPPER.readValue(Files.readAllBytes(pathReadFrom), valueType);
return object;
}
public MyClass get(String id) throws Exception {
MyClass object = storeManager.read(id, MyClass.class);
return object;
}
它工作正常。
是的,您确实需要指定要使用的正确目标类型:否则 Jackson 不知道您可能想要得到哪种 class -- 您只是告诉它 "create a java.lang.Object
out of JSON" ,它通过使用所谓的 "untyped" 模式愉快地做到了:JSON 对象变成 java.util.Map
s,JSON 数组 java.util.List
s,JSON 字符串常规 Java 字符串等。
所以如果你想让 JSON 绑定到 Class MyClass
,你将传递 MyClass.class
而不是 Object.class
。