繁体   English   中英

如何使用通用类类型参数类

[英]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 StringClass类型,以便告诉映射器根据字符串创建哪个Java类:

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

也就是说,你把一个Class类型的T ,并返回的实例 T 用法是(而不是最后一个代码块):

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

其中Person.classClass<Person> ,这意味着该方法以Person返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM