| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2010 12:05:10
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
What is the result?
A. 1 2
B. 2 2
C. 2 3
D. 3 2
E. 3 3
F. Compilation fails
G. An exception is thrown at runtime
A resposta correta é a G. Porém, eu gostaria de saber porque o compilador não consegue detectar que Dog não possui a interface Comparable implementado. Uma vez que eu declarei o TreeSet explicitamente como um treeSet que só aceita Dogs, pra mim o compilador teria condição de dar um erro em tempo de compilação. Caso fosse:
ou mesmo
Eu concordo que não tem como o comipilador avisar nada. Mas, no caso, temos:
o que para mim é informação suficiente para o compilador detectar que Dog não implementa a interface Comparable (o que vai dar problema para um treeset...)
Alguém possui alguma explicação do porquê o compilador não detecta isso?
Obrigado!
This message was edited 1 time. Last update was at 01/02/2010 13:32:50
|
Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2010 12:23:47
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
repare na declaração do método add da classe TreeSet:
reparou que nada impeça que vc adicione um objeto que não implemente a interface Comparable....
se a declaração fosse assim:
se a declaração fosse assim ai isso impediria de vc adicionar um objeto que não implemente a interface Comparable....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2010 13:02:49
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
Membro desde: 29/05/2008 14:09:28
Mensagens: 1616
Offline
|
Devem haver motivos históricos também. A classe TreeSet está na linguagem desde a versão 1.4, antes de generics. Assim, se essa restrição fosse colocada provavelmente muita coisa antiga não iria mais funcionar.
|
"A Técnica é transformada em Arte por quem a emprega"
"O futuro pertence àqueles que acreditam na beleza de seus sonhos"
Computadores Fazem Arte
http://www.uaijug.com.br
"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2010 13:05:30
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
Não é necessário que os objetos de um TreeSet sejam comparáveis. Um dos construtores do TreeSet recebe como parâmetro um Comparator e, nesse caso, os objetos não precisam estender Comparable.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2010 13:47:24
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
ViniGodoy wrote:Não é necessário que os objetos de um TreeSet sejam comparáveis. Um dos construtores do TreeSet recebe como parâmetro um Comparator e, nesse caso, os objetos não precisam estender Comparable.
De fato, é bem mais fácil fazer isso em Java que em C++. Embora a filosofia seja exatamente a mesma (se você quiser uma ordenação diferente da padrão, tem de passar um objeto comparador), isso em C++ é bem desajeitado. Vou mostrar um código que cria dois std::set (o equivalente do java.util.TreeSet). Um deles ordenando por id, outro por nome. Vocês vão ver que é meio desajeitado (tanto é que no C++0X o jeito de fazer isso é mais parecido com o do Java.)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2010 14:35:44
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
Você pode reduzir muito dessa verbosidade usando boost lambda e o boost for each.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
|
|