我写了一段代码,检查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
2条答案
按热度按时间gudnpqoy1#
ArrayList
在(至少)Sun JDK 1.7u67中,在OpenJDK 1.6中包含一个private int size
,它可以被groovy访问。如果您的其他环境使用另一个JDK,这个var可能不存在,groovy将回退到[1,2,3]*.getSize()
的解释,然后失败。ao218c7q2#
Groovy版本:
2.4.21
,(Jenkins:2.387.2
),我们可以使用size()
方法。添加as,
getSize()
,对我不起作用。错误: