).

я есть метод в классе, который имеет тип возвращаемого значения, указанный с помощью универсального.

public class SomeMain {

  public static void main(String[] args) {

    Foo<Integer> foo = new Foo<Integer>();
    System.out.println(foo.getFoo()); // Works, prints out "Foo"

  }

  public static class Foo<E>  {
    public E getFoo() {
      return (E) "Foo";
    }
  }
}

С универсальным типом возврата, я предположил, что возвращение в приведенном выше примере оценивается как:

return (Integer) "Foo";  // Inconvertible types !!!

ВместоString возвращается и печатается правильно.

Я получаю ошибку компиляции, если я изменяю вызов на:

String fooString = foo.getFoo(); // Compile error, incompatible types found
System.out.println(fooString);

Что мне не хватает, чтобы помочь мне понять, что здесь происходит и почему оригинальная версия не привела к ошибке компиляции.

Ответы на вопрос(3)

Ваш ответ на вопрос