2012-02-21 136 views
-1

我有一个我无法理解的问题。元素在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 
} 

不!

+0

你可以粘贴你正在初始化列表的完整代码吗? – NINCOMPOOP 2012-02-21 11:05:21

+0

@noob *咳嗽*'列表cs = [“a”];' – bezmax 2012-02-21 11:06:29

+0

这是Java吗?如果没有适当标记。 – sgowd 2012-02-21 11:06:47

回答

0

我最后再次签出项目,并像以前一样进行构建。

问题已消失,不知道为什么,但现在它的作品!

我只需将所有更改复制到新工作区并继续开发。

让这个解决方法成为经验的一部分。

2

但具体体环说,目前的元素为null

不,它不需要。如果您在Groovy的控制台这段代码,断言通过:

List cs = ["a"]; 
    for(String c:cs){ 
    assert c == 'a' 
    } 

相反,如果你在控制台中运行该代码断言失败

List cs = ["a"]; 
    for(String c:cs){ 
    assert c == null 
    } 

这确凿地证明的第一要素列表是“a”而不是null

+0

不,它不?是的,它确实!调试器sais“c为空”,我编辑我的问题来强制“是”。 – 2012-02-21 11:21:01

+0

@PeterRader不要相信IntelliJ告诉你的一切。如果您确信'c == null',您如何解释在Groovy控制台中运行这些代码片段的结果。我只能通过推断'c =='a'' – 2012-02-21 11:49:29

+0

来解释它,但Grails会在c.toString()上引发NPE。 “print c == null”打印为真。 – 2012-02-21 12:03:13

0

尝试将GroovyString强制转换为String可能是问题。尝试使用单引号字符串文字。

相关问题