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
.