2

Groovy ast 変換コードを使用して Java クラスを操作することは可能でしょうか?

はいの場合、例を挙げてください。

いいえの場合、その理由を教えてください。

4

2 に答える 2

5

はい、Groovy AST Transformations を Java コードで使用することは可能です。Groovy は Java バイトコードにコンパイルされ、Java ライブラリ上に構築されます。2 つの言語間の相互運用性は優れています。

Groovy サイトには、AST Transformationsをカバーするセクション全体があります。

以下は、Java/Groovy が混在するアプリケーションの例です。標準の Java インターフェイスと実装があります。groovy クラスは @Delegate AST 変換を使用し、invokeMethod も使用します。

Java クラス:

interface IFoo {
    public String someMethod(String arg1);
}

class Foo implements IFoo {
    public String someMethod(String arg1) { 
        arg1+arg1;
    }
}

Groovy クラス:

class Bar implements IFoo {
    @Delegate Foo foo = new Foo()
    def otherMethod() {
        someMethod("abcdef")
    }
}

new Bar().otherMethod() を実行すると、'abcdefabcdef' が返されます。

于 2009-11-05T13:45:42.947 に答える
0

多分。最初の問題は、AST を提供する Java コンパイラを見つけることです。Eclipse コンパイラーを試してください。ここでは、Groovy AST トランスフォーマーが期待する型にすべての型をマップするだけです。ダックタイピングは役に立ちますが、2 つの AST に互換性のある情報が含まれている場合に限ります (これは疑問です)。

その後、バイトコードが生成されるにコンパイラから AST を取得する方法を見つけてから、変更された AST をコンパイラに再度挿入してバイトコードを取得する方法を見つける必要があります。

全体として、おそらく不可能ではありませんが、ある程度の作業が必要です。

于 2009-11-02T14:14:23.077 に答える