Collections Groovy具有集合的大小属性?

Collections Groovy具有集合的大小属性?,collections,groovy,Collections,Groovy,我已经编写了一段代码,其中我正在检查ArrayList的大小,如: [1,2,3].size 所有这些都在Groovy控制台和Grails嵌入式Tomcat服务器上运行良好。但一旦我将此代码部署到WebSphereApplicationServer,我就会收到一个异常,声明 Exception evaluating property 'size' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No

我已经编写了一段代码,其中我正在检查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之后,我意识到方法调用中缺少了括号。属性表示法不应该起作用,因为集合中没有方法
getSize()
(它是普通的
size()
),这一切都是有意义的

让我困惑的是,为什么
someCollection.size
可以在Groovy控制台和Grails上工作?


Grails和Groovy控制台版本在Sun JDK 1.7u67中(至少)是2.3.6

ArrayList
,在中保存了Groovy可以访问的
私有int size
。如果您的其他环境使用另一个JDK,那么这个变量可能不存在,groovy将退回到对
[1,2,3]*.getSize()
的解释,然后解释失败。

使用的groovy版本是否不同?
ArrayList
有一个私有变量
size
(至少在sun JDK 1.7u67中是这样)。我期望不同的JDK,Grails框架捆绑在应用程序中,所以两者都是一样的。不同的JDK是很好的候选。Websphere可能有自己的实现。您能找出哪一个并对其进行分解吗?您使用的是sun/openjdk吗?服务器版本可能是:java版本“1.6.0”java(TM)SE运行时环境(构建pap6460sr12-20121025_01(SR12))IBM J9 VM(构建2.4,JRE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460sr12-20121024_126067(启用JIT,启用AOT)J9VM-20121024_126067 JIT-r9_2012091426057GC-20120928_AA)JCL-20121014_01我必须跳过disasm,至少目前是这样。ArrayList的实现,其中所讨论的代码不起作用,实际上没有大小成员变量。