Dúvida sobre uso de Generics na invocação de um método  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

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:



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!

IGOR BRITO ALVES
@igoralves
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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.<U>f1 para explicitar que nessa invocação, T = U, e aí como U extends X está tudo bem.

This message was edited 1 time. Last update was at 26/10/2007 15:36:01

[WWW]
jonatanpedro
Thread.start()
[Avatar]

Membro desde: 30/01/2007 08:41:10
Mensagens: 46
Offline

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

public class Teste<U> {


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

SCJP 5
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

thingol wrote: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.<U>f1 para explicitar que nessa invocação, T = U, e aí como U extends X está tudo bem.

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 "<U>" 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! ;)
jonatanpedro
Thread.start()
[Avatar]

Membro desde: 30/01/2007 08:41:10
Mensagens: 46
Offline

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



SCJP 5
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

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


[/quote]

Relaxa, obrigado por se preocupar em ajudar!

This message was edited 1 time. Last update was at 26/10/2007 16:30:49


IGOR BRITO ALVES
@igoralves
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team