2

我有一个 GWT 客户端通用超类SuperClass<T>。有些子类明确定义了泛型类型,比如SubClass extends SuperClass<String>等等。我需要在超类中获取泛型类类型,比如T.class(当然它不起作用,但我希望你明白)。

所以我最终Class<T> getClassType()在超类中创建了一个方法。在子类中,我将其覆盖为以下内容:

@Override    
protected Class<String> getClassType(){    
 return String.class;    
}

虽然它有效,但我不喜欢这种方法,因为我必须多次明确定义类型。我正在寻找一些解决方法,以便我可以编写更少的代码是子类。

在服务器端我可以使用反射,但在客户端它不可用。

我看到了一些关于使用生成器的建议,但并没有真正看到它在这里有什么帮助。

4

1 回答 1

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 泛型编译时特性。

于 2013-06-13T18:24:12.040 回答