GWT.create(SomeClass.class)
とnew SomeClass()
の違いは何ですか?
なぜあなたは他の上に1つを使用するのですか?
GWT.create
は、遅延バインディングのためにGWTコンパイラーによって使用されます。遅延バインディングは、コンパイル時に多くのバージョンのコードを生成することで動作するGWTコンパイラの機能であり、実行時のブートストラップ中に特定のクライアントがロードする必要があるのはそのうちの1つだけです。
この特定のユースケースに依存する場合にのみ、GWT.create
を使用してください。たとえば、RPCクラスを作成する場合:(MyServiceAsync)GWT.create(MyService.class)
。その他の場合はすべて、new
を使用します。
詳細については、遅延バインディングのGWTページを確認してください。 http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html
GWT.create リフレクションのサポートがないため、遅延バインディング作業を採用しています。
[〜#〜] faq [〜#〜] によると:
遅延バインディングは、Google Web ToolkitのJavaリフレクションに対する答えです。
ユースケースから始めて、遅延バインディングを説明するのが最も簡単です。すべてのWebブラウザーには独自の特徴があり、通常は多くの特徴があります。 (管理できない数は、GWTが最初に解決するために作成された問題です。)標準的なJava特異性を扱う方法は、カスタムコードをサブクラスにカプセル化することです。サポートされている各ブラウザのサブクラス:実行時に、アプリケーションはリフレクションと動的クラスローディングを使用して、現在の環境に適切なサブクラスを選択し、クラスをロードし、インスタンスを作成し、そのインスタンスをプログラム期間中サービスプロバイダーとして使用します。
これは確かにGWTが行うことです。ただし、GWTアプリケーションが最終的に実行されるJavaScript環境は、動的クラスローディング(動的バインディングとも呼ばれます)をサポートしていません。生成されたJavaScriptコードに各ブラウザーをサポートするコードを含めることはできますが、そうするには、すべてのサポートを含める必要がありますブラウザは単一のアプリケーションファイルにあります。なぜOperaユーザーがFirefoxに固有のコードをダウンロードする必要があるのに、それが必要になる可能性がまったくないのですか?
動的バインディングはGWTの手法として利用できないため、GWTは代わりに遅延バインディングを使用します。これを考える1つの方法は、「実行時ではなくコンパイル時に発生する動的なクラスローディング」です。 GWTコンパイラーは、Javaアプリケーションをコンパイルするときに、サポートする必要があるすべての異なる「同期」を決定し、その特定の構成用にアプリケーションの厳密で合理化された別個のバージョンを生成します。 Firefox用のアプリケーションファイルのバージョンは、Opera用のものとは異なります。