Groovy有一个用于Collection的size属性吗?

hwamh0ep  于 2023-05-06  发布在  其他
关注(0)|答案(2)|浏览(195)

我写了一段代码,检查ArrayList的大小,如下所示:

[1,2,3].size

在Groovy控制台和Grails嵌入式Tomcat服务器上都运行良好。但是当我将这段代码部署到WebsphereApplicationServer时,我收到一个异常

Exception evaluating property 'size' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: size for class: java.lang.Integer.

经过一段时间的调试、测试和大量的WTF,我意识到方法调用中缺少括号。属性符号不应该工作,因为Collection没有方法getSize()(它是普通的size()),这一切都是有意义的。
让我困惑的是为什么someCollection.size可以在Groovy控制台和Grails上工作?
Grails和Groovy Console版本为2.3.6

gudnpqoy

gudnpqoy1#

ArrayList在(至少)Sun JDK 1.7u67中,在OpenJDK 1.6中包含一个private int size,它可以被groovy访问。如果您的其他环境使用另一个JDK,这个var可能不存在,groovy将回退到[1,2,3]*.getSize()的解释,然后失败。

ao218c7q

ao218c7q2#

Groovy版本:2.4.21,(Jenkins:2.387.2),我们可以使用size()方法。
添加as,getSize(),对我不起作用。错误:

groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.getSize() is applicable for argument types: () values: []
Possible solutions: size(), size(), size(), get(int), get(int), getAt(int)

相关问题