Image

Imagekrlz wrote in Imageru_java

Странное поведение компилятора в классах с дженериксами

Столкнулся с такой особенностью компилятора. Пишу такой код:
  public static void main(String[] args) {
    class A<B> {
      List<String> getAs() { return null; };
    }

    for (String a : new A().getAs()) {

    }
  }

При компиляции вылетает ошибка: incompatible types found: java.lang.Object required java.lang.String

Меняю так:
  public static void main(String[] args) {
    class A {
      List<string> getAs() { return null; };
    }

    for (String a : new A().getAs()) {

    }
  }

Все работает.

Меняю так:
  public static void main(String[] args) {
    class A<B> {
      List<String> getAs() { return null; };
    }

    for (String a : new A<Object>().getAs()) {

    }
  }

Тоже все в порядке.

Кто нибудь знает, почему так происходит?