2012-02-15 16 views

答えて

2

はい、可能ですが、通常の方法でJVM上で行うことはできません - 実行時にプロキシクラスや実装を生成する他のメソッドは利用できませんが、GWT.createメソッドがあります。あなたが作成したモジュールファイルで宣言されたリバインドルールと、インクルードするinheritsステートメントがあること)を実装します。

これらのリバインドルールを使用する最も簡単な方法は、インターフェイスまたはクラスをより良い実装に置き換えることです。これは<replace-with />タグを使用し、置き換えるものと置き換えるものとを指定することになります。これはあなたを助けない

<replace-with class="com.google.gwt.user.client.impl.DOMImplMozilla"> 
    <when-type-is class="com.google.gwt.user.client.impl.DOMImpl"/> 
    <when-property-is name="user.agent" value="gecko1_8"/> 
</replace-with> 

が、知っておくと便利です:Firefoxを使用している場合たとえば、GWTは自動的にヤモリ特定のバージョンとその基礎となるDOM実装のコードを置き換えます。

これらを満たすための2つ目の方法は、Generatorクラスを宣言して、必要な実装を提供することです。ジェネレータはcom.google.gwt.core.ext.Generatorを拡張し、渡されたクラスを調べて新しい型を作成して書き出し、完全修飾名を返します(GWT.create(SomeClass.class)を呼び出した場所で使用されます)。

あなたの場合、インターフェイスMyInterfaceのメソッドを見て、それぞれの戻り値のデフォルトのコンストラクタを呼び出すようなことをするとよいでしょう。だから、発電機を通じてMyInterfaceのインスタンスを取得し、このようにそれを求める、とのインターフェースは説明としてそれを使用するには:

MyInterface impl = GWT.create(MyInterface.class); 
ThingA a = impl.getThingA(); 

があなたの発電機を宣言するには、それは、使用それを見ている場所、それはあなたのMyInterfaceを交換する必要があることあなたのモジュールファイル内でこのようなルール(規則によって、GWTコンパイルのクラスは、クライアントパッケージに行くと同じように、発電機が再バインドパッケージに行く):その向こう

<generate-with class="my.package.to.rebind.MyInterfaceGenerator"> 
    <when-type-is class="my.package.to.client.MyInterface" /> 
</generate-with> 

は、あなたはどのようないくつかを見てみたいと思うでしょう既にGWTコードベースにある他のジェネレータは(コアGWTチームの外で書かれています)。

オリジナルのImageBundle(現在はClientBundleで置き換えられています)は、実際にClassSourceFileComposerFactoryのソースファイルを作成し、SourceWriterに書き出しを開始する方法はかなり簡単です。この大部分はgenerateおよびgenerateImplClassの方法でcom.google.gwt.user.rebind.ui.ImageBundleGeneratorの方法で見つけることができます。

GWTのRPCはcom.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGeneratorと `` com.google.gwt.user.rebind.rpcによって生成されます。ProxyCreator - これは使い始めるのに少し複雑ですが、マーカーインターフェイスを使って生成するマーカーインターフェイス(新しいインターフェイスごとに新しいリバインドルールを作成するのではなく、ほぼ同じことですが)を含むいくつかの良い洞察を提供します。

0

バイトコードの作成が必要なので、これは不可能ですが、JavaScriptではバイトコードがなく、GWTではリフレクションAPIも利用できません。

+0

理由がわからない理由:具体的な実装*を作成せずに*できないためです。 'GWT.create'にアクセスしてジェネレータを生成させることは同じことです。文字列からJavaコードを作成するだけで*具体的な実装*を提供しているので、コンパイル時に実行されます。実行時にこれを行う方法はありません。 – Strelok

+0

あなたは技術的には正しいですが、その作業はコンパイル時に行われますが、結果はGWT以外のコードで(一般的に)使用できません。答えは有効であり、助けても、GWTについての期待を設定しています。だから、なぜ人々がそれを投票するのか知りません... –

関連する問題