使用泛型类型作为类参数

时间:2016-02-11 01:25:22

标签: java json generics jackson

我有这个班级

class X<T>{
    public T dowhatever(){
         //jackson parsing
         ObjectMapper mapper = new ObjectMapper();
         T obj = mapper.readValue(jsonString, T);
         return obj;
    }
}

但显然,我无法将T传递给readValue方法。我需要一个class信息。有没有办法在不将Class对象作为参数传递的情况下对其进行概括?

P.S: 我省略了不必要的代码并留下了相关内容。

2 个答案:

答案 0 :(得分:0)

概括它的唯一方法是通过一个具有特定类的子类作为泛型

class MyX extends X<Type> {

您可以在运行时获取Type,因为这必须可供编译器检查。

答案 1 :(得分:0)

试试这个

class X<T> {
    @SuppressWarnings("unchecked")
    public void dowhatever(T... dummy){
        Class<T> classT = (Class<T>)dummy.getClass().getComponentType();
        System.out.println(classT);
    }
}

class Person { }

X<Person> x = new X<>();
x.dowhatever(/* no arguments */); // -> class Person 

或者你可以在构造函数中获取类对象。

class X<T> {

    private final Class<T> classT;

    @SuppressWarnings("unchecked")
    public X(T... dummy) {
        classT = (Class<T>)dummy.getClass().getComponentType();
    }
}