web-dev-qa-db-ja.com

なぜnewではなくGWT.create()を使用するのですか?

GWT.create(SomeClass.class)new SomeClass()の違いは何ですか?

なぜあなたは他の上に1つを使用するのですか?

57
RodeoClown

GWT.createは、遅延バインディングのためにGWTコンパイラーによって使用されます。遅延バインディングは、コンパイル時に多くのバージョンのコードを生成することで動作するGWTコンパイラの機能であり、実行時のブートストラップ中に特定のクライアントがロードする必要があるのはそのうちの1つだけです。

この特定のユースケースに依存する場合にのみ、GWT.createを使用してください。たとえば、RPCクラスを作成する場合:(MyServiceAsync)GWT.create(MyService.class)。その他の場合はすべて、newを使用します。

詳細については、遅延バインディングのGWTページを確認してください。 http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html

64

GWT.create リフレクションのサポートがないため、遅延バインディング作業を採用しています。

[〜#〜] faq [〜#〜] によると:

遅延バインディングは、Google Web ToolkitのJavaリフレクションに対する答えです。

ユースケースから始めて、遅延バインディングを説明するのが最も簡単です。すべてのWebブラウザーには独自の特徴があり、通常は多くの特徴があります。 (管理できない数は、GWTが最初に解決するために作成された問題です。)標準的なJava特異性を扱う方法は、カスタムコードをサブクラスにカプセル化することです。サポートされている各ブラウザのサブクラス:実行時に、アプリケーションはリフレクションと動的クラスローディングを使用して、現在の環境に適切なサブクラスを選択し、クラスをロードし、インスタンスを作成し、そのインスタンスをプログラム期間中サービスプロバイダーとして使用します。

これは確かにGWTが行うことです。ただし、GWTアプリケーションが最終的に実行されるJavaScript環境は、動的クラスローディング(動的バインディングとも呼ばれます)をサポートしていません。生成されたJavaScriptコードに各ブラウザーをサポートするコードを含めることはできますが、そうするには、すべてのサポートを含める必要がありますブラウザは単一のアプリケーションファイルにあります。なぜOperaユーザーがFirefoxに固有のコードをダウンロードする必要があるのに、それが必要になる可能性がまったくないのですか?

動的バインディングはGWTの手法として利用できないため、GWTは代わりに遅延バインディングを使用します。これを考える1つの方法は、「実行時ではなくコンパイル時に発生する動的なクラスローディング」です。 GWTコンパイラーは、Javaアプリケーションをコンパイルするときに、サポートする必要があるすべての異なる「同期」を決定し、その特定の構成用にアプリケーションの厳密で合理化された別個のバージョンを生成します。 Firefox用のアプリケーションファイルのバージョンは、Opera用のものとは異なります。

29
Robert Munteanu