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
.