Equals, Hashcode, ToString, Comparable e Comparator

3.159 visualizações

Publicada em

Regras e boas práticas para o uso de Equals, Hashcode, ToString, Comparable e Comparator.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.159
No SlideShare
0
A partir de incorporações
0
Número de incorporações
160
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Equals, Hashcode, ToString, Comparable e Comparator

  1. 1. Equals, Hashcode, ToString,Comparable e Comparator.<br />Desmistificando o Conhecimento - 2010<br />Rodrigo Cascarrolho<br />twitter.com/rodrigocasca<br />
  2. 2. Motivação<br />Aumento da qualidade do software.<br />Nivelamento do conhecimento.<br />Técnico<br />Conceitual<br />Processo<br />Equipe com aprendizado contínuo.<br />Gerar o hábito de questionar:<br />Como vou implementar isso?<br />Como vou testar isso?<br />Como melhorar o processo?<br />Refactoring...<br />Aumentar a compreensão do domínio.<br />
  3. 3. Object<br />Todas as classes estendem Object.<br />Os métodos não-finais foram projetados para serem estendidos.<br />Os contratos DEVEM ser obedecidos.<br />
  4. 4. Object<br />Todas as classes estendem Object.<br />Os métodos não-finais foram projetados para serem estendidos.<br />Os contratos DEVEM ser obedecidos.<br />
  5. 5. Pojo<br />
  6. 6. equals()<br />Quando NÃO usar:<br />A classe é única (Ex: Thread)<br />Não há interesse em teste lógico.<br />Superclasse já possui equals().<br />Classe privada.<br />Quando USAR:<br />Quando precisamos de igualdade lógica.<br />Onde será usado?<br />Comparação lógica de objetos.<br />Chave de conjuntos.<br />
  7. 7. equals()<br />Contrato<br />Reflexivo<br />x.equals(x) returntrue;<br />Simétrico<br />x.equals(y) returntrue;<br />y.equals(x) returntrue;<br />Transitivo<br />x.equals(y) returntrue;<br />y.equals(z) returntrue;<br />x.equals(z) returntrue;<br />Consistente<br />Várias chamadas retornam o mesmo valor (true ou false)<br />x.equals(null) returnfalse;<br />Atributos derivados podem ser ignorados<br />Atenção<br />Primitivos: usar ==<br />Float: usar Float.compare(f1, f2);<br />Double: usar Double.compare(d1, d2);<br />
  8. 8. EqualsBuilder<br />org.apache.commons.lang.builder.EqualsBuilder;<br />Se necessário<br />Two Objects that compare as equals must generate the same hash code, but two Objects with the same hash code do not have to be equal. <br />
  9. 9. hashCode()<br />Sempre sobreponha hashCode ao sobrepor equals (contrato Object.hashCode).<br />Objetos iguais devem ter o mesmo código hash.<br />Usado em coleções baseadas em hash.<br />Sempre que chamando, o código hash deve retornar o mesmo inteiro.<br />Objetos diferentes podem ter o mesmo código hash.<br />
  10. 10. hashCode()<br />Atenção<br />Float: usar Float.floatToInBits(f);<br />Double: usar Double.doubleToInBits(d);<br />
  11. 11. org.apache.commons.lang.builder.HashCodeBuilder;<br />you pick a hard-coded, randomly chosen, non-zero, odd number ideally different for each class <br />Se necessário<br />HashCodeBuilder<br />
  12. 12. toString()<br />Contrato: <br />“representação concisa, mas informativa, que seja fácil para uma pessoa ler”<br />“Pojo@f9f33525”<br />Boa implementação torna a classe mais agradável de usar. <br />Fácil???<br />Texto: Teste toString Booleano: true Data: Fri Sep 10 01:44:47 BRT 2010<br />
  13. 13. ToStringBuilder<br />org.apache.commons.lang.builder.ToStringBuilder;<br />org.apache.commons.lang.builder.ToStringStyle;<br />PojoBuilder@10b30a7[Texto=TESTE1,Lista=[1, 2, 3],Boolean=true,Data=09/09/2010]<br />PojoBuilder@e09713[Texto=TESTE1,Lista=[1, 2, 3],Boolean=true,Data=09/09/2010]<br />
  14. 14. ToStringBuilder<br />org.apache.commons.lang.builder.ToStringBuilder;<br />org.apache.commons.lang.builder.ToStringStyle;<br />
  15. 15. compareTo()<br />Indica a ordem natural da classe.<br />Permite comparações em ordem.<br />Contrato:<br />Mesmo contrato usado no equals.<br />(x.compareTo(y) == 0) == (x.equals(y))<br />Quando violado o contrato, podem invalidar outras classes, como as coleções ordenadas TreeSet e TreeMap e classes utilitárias Collection e Arrays.<br />Exemplo:<br />Collections.sort(lista);<br />
  16. 16. CompareToBuilder<br />org.apache.commons.lang.builder.CompareToBuilder;<br />
  17. 17. Comparator<br />Necessitamos de ordenação diferente da ordenação padrão da classe.<br />Necessitamos de mais de um tipo de ordenação para a classe.<br />
  18. 18. TipoOrdenação<br />Comparator<br />AdminAlunosComparator comparator = new AdminAlunosComparator(column, ascending);<br />Collections.sort(lista, comparator);<br />
  19. 19. Fim<br />Obrigado!<br />

×