我如何使用未知 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 );
}
}
其中 MAPPER
是 ObjectMapper
的一个实例,那么它可以从这样的地方调用:
deser( "{<json-string-here>}", new TypeReference<ArrayList<SomeClass>>(){} );
此 class 甚至可以用于非 List
情况。
deser( "{<json-string-here>}", new TypeReference<SomeClass>(){} );
假设 SomeClass
具有无参数构造函数或 Jackson 创建者方法。
我有 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 );
}
}
其中 MAPPER
是 ObjectMapper
的一个实例,那么它可以从这样的地方调用:
deser( "{<json-string-here>}", new TypeReference<ArrayList<SomeClass>>(){} );
此 class 甚至可以用于非 List
情况。
deser( "{<json-string-here>}", new TypeReference<SomeClass>(){} );
假设 SomeClass
具有无参数构造函数或 Jackson 创建者方法。