[英]How to use the generic class type parameter class
我有一个遗传类别参数
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) // ????
您可以尝试从这里开始。 休息应该根据您的要求进行。
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
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
返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.