0

我有一个遗传类参数

public static <T> T parse(String json, Class<T> clazz) {
   T result = null;
   result = mapper.readValue(json, clazz);

   return result;
}

假设我有一个 json

{
    "name": "kim"
}

我应该如何创建 POJO Class<T> clazz

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) // ????
4

2 回答 2

0

您的 JSON 表明name您的对象的属性是String. 因此你的对象看起来像

class Person {
    String name;
    // getter and setter
}

在这种情况下,没有理由使用 POJO 泛型。您的最后一个代码块也表明是这种情况。name只有当它可以有不同的表示时,你才会想要一个泛型类型。想想如何List<T>使用它的泛型类型。您是否希望Person<String>,Person<StringBuilder>Person<MyObject>指定不同类型的name? 可能不是。

通用用法确实会在您的parse方法中发挥作用。parse接受一个 JSONString和一个Class类型,以便告诉映射器从字符串中创建哪个 Java 类:

public static <T> T parse(String json, Class<T> clazz)

也就是说,您采用a类型ClassT返回. 用法将是(而不是您的最后一个代码块):T

Person person = parse(json, Person.class);

其中Person.classis Class<Person>,这意味着该方法返回为Person

于 2017-12-02T16:33:24.233 回答
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

于 2017-12-02T10:35:21.740 回答