我正在从Java代码中调用Groovy脚本,并且我知道了如何从该脚本中调用Java方法。
现在,在Java方法中,如果可能的话,我想添加一个方法来列出该脚本中的对象,以便Groovy脚本的其他调用不受此影响。给出了对GroovyShell和相关基础设施的访问。
示例脚本
def myList = [1, 2, 3]
javaMethodToInitializeSomeStuff()
myList.doTheWeirdestThings()发布于 2016-11-18 22:02:59
我的主要目标是限制我的扩展方法的可见性。我用GrovyCategorySupport实现了这一点。
groovy代码将如下所示
def myList = [1, 2, 3]
withWeirdThings {
myList.doTheWeirdestThings()
}在withWeirdThings内部,我使用提供扩展方法(例如,定义public static void doTheWeirdestThings(List<?> list)的类)和闭包的类的列表调用GrovyCategorySupport.use。
发布于 2014-07-31 17:51:20
我认为除非您使用不同的类加载器,否则您对类所做的任何更改都将应用于JVM中的所有实例。
为了向List类添加一个方法,委托是项的列表,收集该列表将创建一个从方法double返回的新列表
List.metaClass.double << {
delegate = delegate.collect { it *= 2 }
}
List items = [1, 2, 3]
items = items.double()
println items // [2, 4, 6]上面的代码不会改变数组中的实际项,但会返回一个新的列表。
有没有理由需要添加一个方法到列表中,而不是只做一些类似这样的事情:
items = items.collect { it * 2 }
println items // [2, 4, 6]https://stackoverflow.com/questions/25054676
复制相似问题