元素在foreach循环中为null
我有一个我无法理解的问题。元素在foreach循环中为null
有一个for-each循环,调试器告诉我列表中有值,但是具体的body-loop表示当前元素为null。
这怎么可能?
public void test(){
List cs = ["a"];
for(String c:cs){
print c; // but c is null(sais the debugger)! The console shows "null".
}
}
编辑:另一个occourence是:
List<StaticSubFoobary> getBackendSubFoobaryList(List<String> electedSubFoobaryIds) {
List<StaticSubFoobary> subFoobaries = getStaticBackendFoobaryList()?.collect { StaticMainFoobary cat -> cat.backendSortedSubFoobaries }?.flatten()
List<StaticSubFoobary> electedSubFoobaries = subFoobaries.findAll { it.numericId in electedSubFoobaryIds}
return electedSubFoobaries
}
不要抛出NPE 但是:
List<StaticSubFoobary> getBackendSubFoobaryList(List<String> electedSubFoobaryIds) {
List<StaticSubFoobary> subFoobaries = getStaticBackendFoobaryList()?.collect { StaticMainFoobary cat -> cat.backendSortedSubFoobaries }?.flatten()
List<StaticSubFoobary> electedSubFoobaries = []
for(StaticSubFoobary it:subFoobaries)
if(it.numericId in electedSubFoobaryIds)
electedSubFoobaries.add(it)
return electedSubFoobaries
}
不!
我最后再次签出项目,并像以前一样进行构建。
问题已消失,不知道为什么,但现在它的作品!
我只需将所有更改复制到新工作区并继续开发。
让这个解决方法成为经验的一部分。
但具体体环说,目前的元素为null
不,它不需要。如果您在Groovy的控制台这段代码,断言通过:
List cs = ["a"];
for(String c:cs){
assert c == 'a'
}
相反,如果你在控制台中运行该代码断言失败
List cs = ["a"];
for(String c:cs){
assert c == null
}
这确凿地证明的第一要素列表是“a”而不是null
不,它不?是的,它确实!调试器sais“c为空”,我编辑我的问题来强制“是”。 – 2012-02-21 11:21:01
@PeterRader不要相信IntelliJ告诉你的一切。如果您确信'c == null',您如何解释在Groovy控制台中运行这些代码片段的结果。我只能通过推断'c =='a'' – 2012-02-21 11:49:29
来解释它,但Grails会在c.toString()上引发NPE。 “print c == null”打印为真。 – 2012-02-21 12:03:13
尝试将GroovyString强制转换为String可能是问题。尝试使用单引号字符串文字。
你可以粘贴你正在初始化列表的完整代码吗? – NINCOMPOOP 2012-02-21 11:05:21
@noob *咳嗽*'列表cs = [“a”];' – bezmax 2012-02-21 11:06:29
这是Java吗?如果没有适当标记。 – sgowd 2012-02-21 11:06:47