Por que o compilador não detecta isso?  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
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
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....
rmendes08
GUJ Master
[Avatar]

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."
ViniGodoy
Moderador
[Avatar]

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
[WWW]
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.)

ViniGodoy
Moderador
[Avatar]

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
[WWW]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team