Qual a diferença nessa sintaxe

4 respostas
LPJava

ae pessoal qual a diferença em usar assim:

public int compareTo(Cat ct){
		return id.compareTo(ct.getId());
	}

ou assim:

public int compareTo(Cat ct){
		return id-ct.getId();
	}

assim eu testando aqui deduzir que com o " - " posso comparar primitivo e com o compareTo apenas objetos… seria isso? ou to equivocado?

4 Respostas

sergiotaborda
camilolopes:
ae pessoal qual a diferença em usar assim:
public int compareTo(Cat ct){
		return id.compareTo(ct.getId());
	}
ou assim: [code] public int compareTo(Cat ct){ return id-ct.getId(); } [code] assim eu testando aqui deduzir que com o " - " posso comparar primitivo e com o compareTo apenas objetos.. seria isso? ou to equivocado?

o métdo compareTo está na realidade comparado objetos Cat
Se a comparação se resume a comparar um inteiro primitivo então a subtração é a forma mais eficiente. Se a comparação de Cat envolve comparar objetos comparáveis então não ha outra forma que invocar compareTo neles.

ViniGodoy

Basicamente, o método compareTo deve retornar 0 se dois objetos forem iguais, um número negativo se this &lt objeto e, se this &gt o objeto, um número positivo.

Se esse algoritmo se basear em dois números inteiros, naturais, que não somem mais do que Integer.MAX_INTEGER, ou que a subtração não seja menor que Integer.MIN_VALUE, podemos usar a formula:

valorDeRetorno = this.valor - objeto.valor;

Não é que o - faça uma comparação. Na verdade, a equaçãozinha matemática é apenas conveniente. Veja bem, acompanhe na tabela algumas possibilidades e veja como se encaixam na regra:

This.getId     ct.getid()      this.getId() - ct.getId()   Significa que   
      10               8                  2                this é maior
      5                2                  3                this é maior
      2                5                 -3                this é menor
      5              -10                 15              this é maior

A última linha foi deixada de propósito. Ela explica a razão pela qual os números devem ser naturais (&gt=0) para que esse truque funcione. Veja que a linha apresentou um resultado errado, pois o número negativo era pequeno o suficiente para adulterar a expressão.

Esse detalhe, e mais explicações sobre o Comparable, estão no livro Effective Java. O comparable, em especial, no capítulo 3, item 11, que podem ser lidos nos exemplos no site oficial do livro.

LPJava

entao o sinal “-” é para primitivos… e compareTo é para objetos… em resumo?

1112

Não. O método compareTo deve comparar o objeto atual com um outro e retornar um inteiro negativo se o objeto atual for menor que o outro, 0 se o objeto atual for igual ao outro e um inteiro positivo se o objeto atual for maior que o outro.

A forma como você implementa isso depende das suas regras de negócio.

Criado 7 de março de 2007
Ultima resposta 7 de mar. de 2007
Respostas 4
Participantes 4