Groovy で @Mixin アノテーションを使用したいと考えています。これは、プライベート メソッドとフィールドを混在させることを除いて、まさに私が望むことを行います。
class A {
def private fooA() {
println("A")
}
}
@Mixin(A)
class B {
def fooB() {
println("B")
}
}
このコードを実行すると
static main(args)
{
def b = new B()
println(b.fooA())
B.metaClass.fooA = {throw new MissingMethodException()};
println(b.fooA())
}
最初にプライベート メソッド A.fooA を呼び出し、"A" を出力します。次に、そのプライベート メソッドが削除され、クラス A に混在するクライアント クラス B から呼び出すことができなくなります。
私の質問は、どうすればこれを一般的な方法で達成できるのでしょうか? @Mixin アノテーションを拡張できます。問題は、私が Groovy を初めて使用することであり、AST 変換の記述方法について見つけるべき情報があまりないことです。それについての章全体がある新しい Groovy in Action の本はまだ出ていません。
代わりに @Delegate を使用できますが、委任先のクラスの変数を宣言する必要があります。これは私が望むものではありません。私のものを使用して開発者に単に @Mixin で彼のクラスに注釈を付けて、私のものを混ぜ合わせるように伝えることができればいいと思います。それだけです。また、クラスのプライベート メソッドとフィールドが、混在するクラスの内部コードを壊しているユーザーによって呼び出されないことを確認できます。
これを成し遂げるために私がどの方向に向けるべきかについてのヒントはありますか? ありがとう、オリバー