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

Membro desde: 23/08/2009 13:14:01
Mensagens: 735
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
Forum Spammer

Membro desde: 26/09/2009 09:18:56
Mensagens: 1270
Offline

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
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 735
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
Forum Spammer

Membro desde: 26/09/2009 09:18:56
Mensagens: 1270
Offline

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
Virtual Machine Man
[Avatar]

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

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
[Email]
evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 735
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
Forum Spammer

Membro desde: 26/09/2009 09:18:56
Mensagens: 1270
Offline

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
Virtual Machine Man
[Avatar]

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

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

Mário Amaral Gonçalves
[Email]
evertonsilvagomesjava
Virtual Machine Man
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 735
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