首页 > 解决方案 > 不向下转换的使用方法

问题描述

我有一种转换不同类的方法

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);

是否可以重构方法以使其对不同的返回类更加灵活并避免强制转换?

标签: javapolymorphism

解决方案


您可以更改签名以匹配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);

如果输入与预期的类不匹配,这当然仍然会导致各种异常。


推荐阅读