我有遗传类参数
public static <T> T parse(String json, Class<T> clazz) {
T result = null;
result = mapper.readValue(json, clazz);
return result;
}
假设我有一个json
{
"name": "kim"
}
我应该如何为Class<T> clazz
创建POJO?
public class Person<T>
{
private T name;
public T getName ()
{
return name;
}
public void setName (T name)
{
this.name = name;
}
}
以及如何传递变量?
Person person = new Person();
parse(json, person) // ????
答案 0 :(得分:0)
您可以尝试从这里开始。休息应根据您的要求流动。
public class Person<T>
{
private T name;
public T getName (){
return name;
}
public void setName (T name){
this.name = name;
}
public static void main(String[] args){
Person<String> p = new Person<String>();
p.setName("Some Name");
System.out.println(p.getName());
}
}
请参阅此页:https://docs.oracle.com/javase/tutorial/java/generics/types.html
答案 1 :(得分:0)
您的JSON建议您的对象的name
属性为String
。因此,您的对象看起来像
class Person {
String name;
// getter and setter
}
在这种情况下,没有理由让POJO具有通用性。您的上一个代码块也表明情况就是这样。只有在可以有不同的表示形式时,您才希望name
为泛型类型。想一想List<T>
如何使用其泛型类型。您是否希望Person<String>
,Person<StringBuilder>
,Person<MyObject>
指定不同类型的name
?可能不是。
通用用法确实在您的parse
方法中发挥作用。 parse
采用JSON String
和Class
类型,以告诉映射器从字符串创建哪个Java类:
public static <T> T parse(String json, Class<T> clazz)
也就是说,您使用Class
类型T
并返回T
的实例。用法是(而不是你的最后一个代码块):
Person person = parse(json, Person.class);
其中Person.class
为Class<Person>
,这意味着该方法返回为Person
。