У меня есть метод в классе, который имеет тип возвращаемого значения, указанный с использованием общего.
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);
Что мне не хватает, чтобы помочь мне понять, что происходит здесь, и почему исходная версия не привела к ошибке компиляции.