我写了一段代码,其中我正在检查一个ArrayList的大小,如下:
[1,2,3].size
在Groovy控制台和Grails嵌入式Tomcat服务器上一切正常。但是一旦我将此代码部署到WebSphere应用程序服务器上,就会收到一个异常报告:
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()
),这是很有道理的。令我感到困惑的是,为什么Groovy控制台和Grails上的
someCollection.size
可以正常工作?Grails和Groovy控制台版本均为2.3.6。
ArrayList
在 sun jdk 1.7u67 中有一个私有变量size
。我预计不同的 JDK 会有所不同。 - cfrick