Warum kann diese generische Methode mit gebundenem Code einen beliebigen Typ zurückgeben?

Warum wird der folgende Code kompiliert? Die MethodeIElement.getX(String) gibt eine Instanz vom Typ @ zurüIElement oder von Unterklassen davon. Der Code imMain class ruft das @ agetX(String) Methode. Der Compiler erlaubt es, den Rückgabewert in einer Variablen vom Typ @ zu speicherInteger (was offensichtlich nicht in der Hierarchie von @ iIElement).

public interface IElement extends CharSequence {
  <T extends IElement> T getX(String value);
}

public class Main {
  public void example(IElement element) {
    Integer x = element.getX("x");
  }
}

Sollte der Rückgabetyp nicht immer noch eine Instanz von @ seiIElement - auch nach dem Typ löschen?

Der Bytecode desgetX(String) Methode ist:

public abstract <T extends IElement> T getX(java.lang.String);
flags: ACC_PUBLIC, ACC_ABSTRACT
Signature: #7                           // <T::LIElement;>(Ljava/lang/String;)TT;

Bearbeiten ErsetztString übereinstimmend mitInteger.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage