foreach循环中的元素为null

时间:2012-02-21 11:01:45

标签: groovy foreach

我有一个我无法理解的问题。

有一个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".
  }
}

编辑:另一个障碍是:

 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
 }

不!

3 个答案:

答案 0 :(得分:2)

  

但具体的body-loop表示当前元素为null

不,不。如果在Groovy控制台中运行此代码,则断言将通过:

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

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

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

最终证明列表的第一个元素是“a”而不是null

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我终于再次检查了该项目并像以前一样构建它。

问题消失了,不知道为什么,但它现在有用了!

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

让这种解决方法成为体验的一部分。