Tive um problema ao compilar uma classe e descobri que era um bug do Java 5 (vejam aqui). Eles indicam um “workaround” que consiste no seguinte código:
this.<U>f1();
A minha dúvida é o que significa o uso do tipo de variável U na invocação do método f1(), Alguém sabe?
this.f1() retorna T, e você sabe que T extends X.
Em f2(), você precisa algo que retorne um tipo que estenda X (ou seja, U extends X).
Mas o compilador se atrapalha porque não entende que T (um parâmetro de tipo) é um tipo que estende X.
Para forçar isso, você usa this.f1 para explicitar que nessa invocação, T = U, e aí como U extends X está tudo bem.
[quote=thingol]this.f1() retorna T, e você sabe que T extends X.
Em f2(), você precisa algo que retorne um tipo que estenda X (ou seja, U extends X).
Mas o compilador se atrapalha porque não entende que T (um parâmetro de tipo) é um tipo que estende X.
Para forçar isso, você usa this.f1 para explicitar que nessa invocação, T = U, e aí como U extends X está tudo bem.[/quote]
Humm, saquei… na verdade eu já imaginava que fosse algo para “forçar”, mas achei melhor tirar a dúvida.
E jonatanpedro, a minha dúvida era quanto ao “” antes do método invocado, nunca tinha visto isso, mas uso Generics a bastante tempo, o código do sistema que faço usa amplamente.