Элемент нулевой в цикле foreach - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть проблема, которую я не могу понять.

Существует цикл 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 ]

2 голосов
/ 21 февраля 2012

, но конкретный цикл тела говорит, что текущий элемент нулевой

Нет, это не так.Если вы запускаете этот код в консоли Groovy, утверждение проходит:

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

И наоборот, если вы запускаете этот код в консоли, утверждение не выполняется

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

Что окончательно доказывает, чтопервый элемент списка - «а», а не ноль

0 голосов
/ 22 февраля 2012

Я наконец проверил проект снова и собрал его, как я всегда делал раньше.

Проблема исчезла, не знаю почему, но она работает сейчас!

Мне просто нужно скопировать все мои изменения в новое рабочее пространство и продолжить разработку.

Пусть этот обходной путь будет частью опыта.

0 голосов
/ 21 февраля 2012

Проблема может быть приведена к приведению GroovyString к String.Попробуйте использовать строковый литерал в одной кавычке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...