繁体   English   中英

如何使用未知的 class 或列表作为 java 中的参数?

[英]How can i use an unknown class or a list as a parameter in java?

我有一个 json 响应。 我正在使用 Jackson 来制作 Java Object 来自 Z466DEEC76ECDF34FCA6D385444 响应。

ObjectMapper objectMapper = new ObjectMapper();

    List<WorkPosition> workPositions = new ArrayList<>();

    try {
        workPositions = (List<WorkPosition>) objectMapper.readValue(response.body(), new TypeReference<List<WorkPosition>>() {});
    } catch (Exception e) {
        e.printStackTrace();
    }

我想创建一个名为 Jackson 的 class 并使此代码成为 static 方法。

public class Jackson {

static ObjectMapper objectMapper = new ObjectMapper();

public static List<WorkPosition> parseList(String body){
    List<WorkPosition> list = new ArrayList<>();
    try {
        list = (ArrayList<WorkPosition>) objectMapper.readValue(body, new TypeReference<List<WorkPosition>>(){});
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return list;        
}

}

以上代码仅适用于 WorkPosition class。 我想让它适用于所有 class。 我尝试过 List<?>、T<>,还尝试将返回的列表作为参数。 但我没有工作。 如何才能做到这一点?

我认为这是不可能的,因为您试图使动态的是类型参数本身。 因此,更好的方法是拥有一种可以反序列化为任何类型的方法,而不仅仅是List

所以,如果你有这样的方法:

public static <T> T deser( String json, TypeReference<T> typeRef ){
    if( json == null || json.length() == 0 ) return null;
    try{
        return MAPPER.readValue( json, typeRef );
    }
    catch( IOException e ){
        throw new RuntimeException( e );
    }
}

其中MAPPERObjectMapper的一个实例,然后可以从以下位置调用它:

deser( "{<json-string-here>}", new TypeReference<ArrayList<SomeClass>>(){} );

这个 class 甚至可以用于非List案例。

deser( "{<json-string-here>}", new TypeReference<SomeClass>(){} );

假设SomeClass具有无参数构造函数或 Jackson 创建者方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM