2015-10-19 44 views
0

这里是我的代码:如何获得泛型类的持久化类参数? <T>

抽象类

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(); 
    } 


} 

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

请帮我谢谢...

回答

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有用。

+0

但我使用的是@Autowired弹簧。只是希望没有使用参数实例化构造函数。有没有办法做到这一点? – teodoro

+0

@ user3047741:检查编辑。 –