如何获取类通用的持久类参数? <T>

时间:2015-10-19 03:48:25

标签: java spring generics autowired

这是我的代码:

抽象类

public abstract class AbstractClass<T>{

    public abstract Class<?> getPersistentClass();

    public void invokeNothing(){
        Class<T> c = getPersistentClass();
        // do something....
        // some code...
    }

}

CommonClass

public class CommonClass<T> extends AbstractClass<T>{

    public Class<?> getPersistentClass(){
        // how to get the persistent class of generic T
        // T.class
        return // T.class
    }

}

服务

public class CommonService{

    @Autowired
    private CommonAbstractClass<Person> commonClass;

    public void invoke(){
        commonClass.invokeNothing();
    }


}

如何获取类通用的持久类参数?在我的类CommonClass中的方法getPersistentClass();

请帮助我谢谢......

1 个答案:

答案 0 :(得分:0)

实际上,由于type erasure导致获得泛型类型参数的运行时类型,因此没有办法(至少没有简单的方法我知道除了某些情况下的反射)。您可以使用以下安全解决方法:

public class CommonClass<T>{

    private final Class<T> type;

    public CommonClass(Class<T> type) {
        this.type = type;
    }

    public Class<T> getMyType() {
        return this.type;
    }

}

但您可能需要将其实例化为:

CommonClass<Person> cp = new CommonClass<Person>(Person.class);

如果你使用的是Spring,你会发现这个answer很有用。