我想在 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 注释他的类,以便混合我的东西,就是这样。而且我可以确定我的类的私有方法和字段不能被用户破坏混入的类的内部代码调用。
有没有人暗示我应该朝哪个方向努力?谢谢,奥利弗