foreach с именем переменной, равным имени поля

Обнаружил интересную вещь при компиляции следующего фрагмента кода:

1    class A {
2        
3     private B line;
4   
5     public void foo() {
6       for (Integer line : line.getElements()) {
7    
8       }
9     }
10    }
11    
12    class B {
13    
14      List<Integer> getElements() {
15         return null; // doesn't matter
16      }
17    }

Обратите внимание на строку 6: мы видим, что имя переменной совпадает с именем поля. IntelliJ Idea 11 игнорирует это и думает, что здесь нет никаких проблем. Но компилятор java сообщает мне, что «строка не имеет метода getElements». Итак, два вопроса:

  1. Следует ли мне отправлять отчет об ошибке в Idea?
  2. Почему сообщение об ошибке от Java такое? Разве он не может обнаружить ошибку? Какой механизм здесь работает? Затмение переменной поля?
21
задан Heiko Rupp 29 January 2012 в 08:31
поделиться