Groovy有Collection的大小属性?

时间:2014-10-23 16:08:44

标签: collections groovy

我写了一段代码,我正在检查ArrayList的大小,如:

[1,2,3].size

一切都适用于Groovy控制台和Grails嵌入式Tomcat服务器。但是,一旦我将此代码部署到Websphere Application Server,我就会收到一个异常陈述

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

1 个答案:

答案 0 :(得分:4)

在(至少)Sun JDK 1.7u67和OpenJDK 1.6中的

ArrayList持有private int size,可供groovy访问。如果您的其他环境使用另一个JDK,则此var可能不存在,并且groovy将回退到[1,2,3]*.getSize()的解释,然后失败。