我有一个GWT客户端通用超类SuperClass<T>
。有些子类明确定义泛型类型,比如SubClass extends SuperClass<String>
等。我需要在超类中获取泛型类类型,类似于T.class
(当然它不起作用,但是我希望你明白这个想法。
所以我最终在超类中创建了一个方法Class<T> getClassType()
。在子类中,我将其覆盖为以下内容:
@Override
protected Class<String> getClassType(){
return String.class;
}
虽然它有效但我不喜欢这种方法,因为我必须多次明确定义类型。我正在寻找一些解决方法,所以我可以编写更少的代码是子类。
在服务器端,我可以使用反射,但在客户端它不可用。
我看到了一些关于使用生成器的建议但是没有真正看到它在这里有什么帮助。
答案 0 :(得分:0)
我会通过构造函数传递它:
public class SuperClass<T> {
private Class<T> type;
public SuperClass (Class<T> type) {
this.type= type;
}
public void Class<T> getClassType() {
return type;
}
}
有第三方图书馆: https://github.com/jhalterman/typetools
没有其他方法可以在运行时中获取它,因为 java generics 是编译时功能。