我有一个传入变量的方法,它代表一个脚本。
e.g。
hello.groovy
Foo.init(this)
Foo.groovy
class Foo {
static init(app) {
}
}
在init方法中为app
变量添加大量新功能的最佳方法是什么?基本上,我想将另一个对象的所有功能添加到app
对象。
例如,如果我有另一个班级:
class Bar {
def a() { }
def b() {
}
}
我希望app
对象基本上是new Bar()
。在JavaScript中,使用原型对象很容易,但我似乎无法在groovy中使用它。完成此任务的最佳方法是什么?或者我应该做些不同的事情?
答案 0 :(得分:1)
YourClass.metaClass.static.yourMethod
与我在Groovy中看到的JS原型最相似。检查此链接:
Groovy meta-programming - adding static methods to Object.metaClass
干杯。
答案 1 :(得分:0)
有几种方法可以做到这一点,每种方法都有优点和缺点。在Groovy文档页面上,Dynamic Groovy部分介绍了其中的几个部分。如果我理解正确,最简单的方法是使用实例的metaClass添加新功能,la:
class Foo {
static void init (a) {
a.metaClass.a = { println "a()"; }
a.metaClass.b = { println "b()"; }
}
}
def myObject = new Object();
Foo.init (myObject);
myObject.a();
myObject.b();
答案 2 :(得分:0)
最简单的方法是使用mixin。基本上你可以在app的类上调用mixin并将其传递给另一个类以将该功能合并到其中。
我修改了你的例子,以在Bar类中显示这种混合。
class Foo {
static init(app) {
app.class.mixin Bar
}
}
class Bar {
def a() { println "a called" }
def b() {
println "b called"
}
}
def app = new Object()
Foo.init(app)
app.a()
app.b()
这个的输出是:
一个叫做的人 b叫
在这种情况下,我将Bar添加到Object类,但您可以将其添加到应用程序中的任何类。