1

GWT がこのメソッドをエミュレートしないことは知っていますが、その機能を提供する機能が必要です。次のアプローチを試しました:

    private static <T extends Widget> T createWidget(Class<T> widgetClass) {
        return GWT.create(widgetClass);
    }

しかし、それをコンパイルしようとすると、エラーが発生します: Only classliters may be used as arguments to GWT.create()

では、エミュレートする前述のメソッドをどのように書くことができClass#newInstanceますか?

4

1 に答える 1

1

GWT.create()常に引数としてクラス リテラルが必要です。つまり、これを渡す必要がありますGWT.create(MyClass.class)

これは、gwt コンパイラがコンパイル時にどのクラスを取得するかを決定する必要があるためです。コードでは、クラスが実行時に渡されることに注意してください。

縮小されたよく知られているクラスのセットに使用することを計画している場合はGWT.create、次のようなことができます。

private static <T extends Widget> T createWidget(Class<T> widgetClass) {
    if (ClassA.class.equals(widgetClass))  {
       return GWT.create(ClassA.class);
    } else if (ClassA.class.equals(widgetClass))  {
       return GWT.create(ClassB.class);
    }
    return null;
}
于 2013-04-05T03:56:34.163 に答える