首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Java向Groovy列表接口添加方法?

如何从Java向Groovy列表接口添加方法?
EN

Stack Overflow用户
提问于 2014-07-31 16:54:29
回答 2查看 223关注 0票数 2

我正在从Java代码中调用Groovy脚本,并且我知道了如何从该脚本中调用Java方法。

现在,在Java方法中,如果可能的话,我想添加一个方法来列出该脚本中的对象,以便Groovy脚本的其他调用不受此影响。给出了对GroovyShell和相关基础设施的访问。

示例脚本

代码语言:javascript
复制
def myList = [1, 2, 3]

javaMethodToInitializeSomeStuff()

myList.doTheWeirdestThings()
EN

回答 2

Stack Overflow用户

发布于 2016-11-18 22:02:59

我的主要目标是限制我的扩展方法的可见性。我用GrovyCategorySupport实现了这一点。

groovy代码将如下所示

代码语言:javascript
复制
def myList = [1, 2, 3]
withWeirdThings {
    myList.doTheWeirdestThings()
}

withWeirdThings内部,我使用提供扩展方法(例如,定义public static void doTheWeirdestThings(List<?> list)的类)和闭包的类的列表调用GrovyCategorySupport.use

票数 0
EN

Stack Overflow用户

发布于 2014-07-31 17:51:20

我认为除非您使用不同的类加载器,否则您对类所做的任何更改都将应用于JVM中的所有实例。

为了向List类添加一个方法,委托是项的列表,收集该列表将创建一个从方法double返回的新列表

代码语言:javascript
复制
List.metaClass.double << {
    delegate = delegate.collect { it *= 2 }
}
List items = [1, 2, 3]
items = items.double()
println items // [2, 4, 6]

上面的代码不会改变数组中的实际项,但会返回一个新的列表。

有没有理由需要添加一个方法到列表中,而不是只做一些类似这样的事情:

代码语言:javascript
复制
items = items.collect { it * 2 }
println items // [2, 4, 6]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25054676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档