java - 不向下转换的使用方法
问题描述
我有一种转换不同类的方法
protected Object convert(String body,Util util) {
Reader reader = new StringReader(body);
ObjectMapper objectMapper = new ObjectMapper();
if(util instanceof MyUtil) {
// returning a myClass object
return objectMapper.readValue(reader, myClass.class);
}
throw new RuntimeError("Class to converter not exist");
}
然后我正在使用这种方法并转换为 MyClass
MyClass myclass = (MyClass) converter.convert(util);
它如何只寻找一个班级
protected MyClass convert(String body,Util util) {
Reader reader = new StringReader(body);
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(reader, MyClass.class);
}
MyClass myclass = converter.convert(util);
是否可以重构方法以使其对不同的返回类更加灵活并避免强制转换?
解决方案
您可以更改签名以匹配readValue
正在执行的操作。
protected <T> T convert(String body, Class<T> clazz) throws IOException {
Reader reader = new StringReader(body);
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(reader, clazz);
}
MyClass myclass = app.convert(json, MyClass.class);
如果输入与预期的类不匹配,这当然仍然会导致各种异常。
推荐阅读
- ios - 无法将 kotlin 接口的快速实现传递给 kotlin 本机
- spring - 在springBoot中使用参数值记录Hibernate查询
- c# - 从 msi 文件中选择行的问题
- wpf - 如何将 TextBox (VIEW) 的 Text 属性绑定到变量 (在 VIEWMODEL 中)
- oracle - 在 Oracle Kubernetes 集群和对象存储上设置 Spinnaker
- node.js - 什么是非 socket.io 进程的示例?
- pyspark - 尝试更改 pyspark 中的数据类型时获取 null
- javascript - 如何删除 Chart.js 条形图的底部刻度
- php - 如何使用 gettext 翻译 MySQL 中的数据?
- java - Android - 如何在 rrule 中创建带有“直到”日期的重复事件?