我写了一段代码,在其中检查ArrayList的大小,例如:
[1,2,3].size
所有这些在Groovy Console以及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,我意识到方法调用中缺少括号。属性表示法不起作用,因为没有getSize()
Collection方法(很简单size()
),这一切都说得通。
令我感到困惑的是,为什么someCollection.size
在Groovy Console和Grails上可以工作?
Grails and Groovy Console版本是2.3.6
ArrayList
在(至少)Sun JDK 1.7u67中和在OpenJDK 1.6中,都有一个private int size
,可通过groovy访问。如果您的其他环境使用另一个JDK,则此var可能不存在,并且groovy会退回到的解释[1,2,3]*.getSize()
,然后失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句