Duvida basica compareTo...[RESOLVIDO]  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1793
Offline

Se eu implemento Comparable e sobreescrevo compareTo dessa forma tudo bem...



E se eu fizer dessa forma o que acontece na comparaçao, nada né?



Tem outra maneira de usar compareTo e compare, sem usar compareTo das classes Wrappers e String?

This message was edited 1 time. Last update was at 09/02/2010 10:53:51

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5088
Online

Você entendeu o que faz compareTo? Ele tem de voltar um valor positivo (digamos +1) se o valor do objeto é maior que o valor a ser comparado, um valor negativo (digamos -1) se o valor do objeto é menor que o valor a ser comparado, e 0 se o valor é igual ao valor comparado.
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1793
Offline

Sim eu sei, mas no caso se eu sobreescrever dessa forma:



ele sempre vai retorna 5, daí ele nao vai estar comparando nada? Pq nem sequer ele esta usando o objeto "o" nem o this, pra fazer essa comparaçao e retornar positivo, negativo ou 0 se for igual...

This message was edited 1 time. Last update was at 09/02/2010 10:29:38

entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5088
Online

Pois é, se sempre retornar 5, então você implementou incorretamente compareTo.
Ele não é que "não faz nada"; ele está retornando um resultado incorreto se o objeto passado como parâmetro for < ou == ao objeto. Se for >, então está retornando um valor > 0, e só nesse caso ele volta um valor correto (é igual à história do relógio parado - ele está certo duas vezes por dia, e errado no resto do dia).
mario.fts
GUJ Ranger
[Avatar]

Membro desde: 14/05/2008 09:41:06
Mensagens: 809
Localização: São Paulo - ZL
Offline

O que vc fez é que o objeto sempre será "maior" que o outro objeto que vc estiver comparando. De acordo com o contrato do método, está errado. nada impede vc de fazer isso, mas não deixa de ser errado. é como sobreescrever o equals e retornar true ou false sempre.

Mário Amaral Gonçalves

"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra
[Email]
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1793
Offline

é igual à história do relógio parado - ele está certo duas vezes por dia, e errado no resto do dia


kkkkkkk, entendi então vai retornar um valor correto somente se o objeto que chamou compareTo for maior, mas e se por um acaso for menor? Acontece erro em tempo de execução ou nada acontece?
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5088
Online

Não retorna erro nenhum, mas coisas que você esperaria que funcionassem (como ordenação com Collections.sort) não vão funcionar direito. OK?
mario.fts
GUJ Ranger
[Avatar]

Membro desde: 14/05/2008 09:41:06
Mensagens: 809
Localização: São Paulo - ZL
Offline

se o objeto for menor, ele vai continuar falando que é maior. ai a ordem vai estar errada no final.

Mário Amaral Gonçalves

"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra
[Email]
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1793
Offline

Ahh sim entendido entao, obrigado entenglament e mario.
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team