| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2007 15:31:30
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2007 15:35:47
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2007 15:41:36
|
jonatanpedro
Thread.start()
![[Avatar]](/images/avatar/8ebb270c06eb053c6d0b0bb201f0d739.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2007 16:01:20
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
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! ;)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2007 16:12:23
|
jonatanpedro
Thread.start()
![[Avatar]](/images/avatar/8ebb270c06eb053c6d0b0bb201f0d739.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2007 16:30:06
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
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
|
|
|
 |
|
|