Por que esse método genérico com um limite pode retornar qualquer tipo?

Por que o código a seguir é compilado? O métodoIElement.getX(String) retorna uma instância do tipoIElement ou de suas subclasses. O código noMain classe chama ogetX(String) método. O compilador permite armazenar o valor de retorno em uma variável do tipoInteger (que obviamente não está na hierarquia deIElement)

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");
  }
}

O tipo de retorno ainda não deve ser uma instância deIElement - mesmo depois do apagamento do tipo?

O bytecode dogetX(String) método é:

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

Editar: SubstituídoString consistentemente comInteger.

questionAnswers(1)

yourAnswerToTheQuestion