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

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

我有 json 回复。我正在使用 Jackson 从 json 响应中创建 Java 对象。

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 并将此代码设为静态方法。

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<>,还尝试将 return 的列表作为参数给出。但我没有工作。如何做到这一点?

我认为这是不可能的,因为您要动态化的是类型参数本身。因此,更好的方法是拥有一种可以反序列化为任何类型而不仅仅是 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 创建者方法。