Dúvida sobre uso de Generics na invocação de um método

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?

Abraços a todos!

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.

Cara o “U” é uma classe especializada de qualquer tipo, o tipo q vc escolher, está em aberto.
Por exemplo:

public class Teste {

public U getValor(U valor){
	
	return valor;
}

public static void main(String[] args) {
	
	Teste<String> t1 = new Teste<String>();
	System.out.println(t1.getValor("Valor 1"));
	
	Teste<Integer> t2 = new Teste<Integer>();
	System.out.println(t2.getValor(23));
}

}

Onde o “U” esta sendo o tipo de classe a sua escolha, O U é uma classe genérica.

Abração

[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.

Obrigado, pessoal! :wink:

Tranquilo, na verdade não tinha entendido a tua pergunta, depois q postei eu percebi,dae já era tarde, hehehe!

:oops:

[quote=jonatanpedro]Tranquilo, na verdade não tinha entendido a tua pergunta, depois q postei eu percebi,dae já era tarde, hehehe!

:oops:
[/quote]

Relaxa, obrigado por se preocupar em ajudar! :wink: