我有一个带有传入变量的方法,它表示一个脚本。
例如:
hello.groovy
Foo.init(this)Foo.groovy
class Foo {
static init(app) {
}
}向初始化方法中的app变量添加大量新功能的最佳方式是什么?基本上,我想将另一个对象的所有功能添加到app对象中。
例如,如果我有另一个类:
class Bar {
def a() { }
def b() {
}
}我希望app对象基本上是一个new Bar()。在JavaScript中,使用prototype对象很容易做到这一点,但在groovy中似乎无法让它工作。实现这一目标的最佳方法是什么?或者我应该做一些不同的事情?
发布于 2010-10-05 06:56:44
YourClass.metaClass.static.yourMethod是我在Groovy中见过的与JS原型最相似的一个。请查看此链接:
Groovy meta-programming - adding static methods to Object.metaClass
干杯。
发布于 2010-02-24 12:48:59
有几种方法可以做到这一点,每种方法都有优缺点。在Groovy文档页面上,关于Dynamic Groovy的部分说明了其中的几个。如果我理解正确的话,最简单的方法是只使用实例的metaClass来添加新功能,例如:
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();发布于 2010-02-24 22:03:47
要做到这一点,最简单的方法是使用混入。基本上,您可以在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的
a称为
在本例中,我将Bar添加到Object类中,但您可以将它添加到应用程序中的任何类中。
https://stackoverflow.com/questions/2323699
复制相似问题