Нашел интересную вещь, скомпилировав следующий фрагмент кода:
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". Итак, два вопроса:
- Должен ли я сообщать об ошибке в Idea?
- Почему сообщение об ошибке с Java такое? Разве это не способно обнаружить ошибку? Какой механизм работает здесь? Затмение переменной поля?