有没有办法使用GWT.create(...)来实例化泛型类的类?

时间:2014-05-02 18:30:54

标签: java gwt binding deferred

有没有办法可以做到这样的事情:

public class Foo<Bar> {
    public Bar newBar() {
        return GWT.create( /* something useful here */ );
    }
}

这会有用吗,例如:

public class Foo<Bar> {
    public Bar newBar(Class<Bar> prototype) {
        return GWT.create(prototype);
    }
}

我会举例如new Foo<MyBar>().newBar(MyBar.class)

但是,理想情况下,我甚至不需要传递原型对象。

1 个答案:

答案 0 :(得分:3)

在这种情况下,没有。必须始终使用实际的类文字调用GWT.create方法,而不是使用变量/ field / parameter。这是因为GWT.create实际上是一种特殊类型的new,没有参数,并且不能使用变量(没有反射):

Class<? extends Bar> clazz = ...;
Bar instance = new clazz;//nope

方法GWT.create 看起来就像一个方法调用,而在Java中它实际上是,但是当你编译成JS时,它必须变成构造函数调用,遵循特定的延迟绑定给定排列的规则。