Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Equals, Hashcode, ToString,Comparable e Comparator.<br />Desmistificando o Conhecimento - 2010<br />Rodrigo Cascarrolho<br...
Motivação<br />Aumento da qualidade do software.<br />Nivelamento do conhecimento.<br />Técnico<br />Conceitual<br />Proce...
Object<br />Todas as classes estendem Object.<br />Os métodos não-finais foram projetados para serem estendidos.<br />Os c...
Object<br />Todas as classes estendem Object.<br />Os métodos não-finais foram projetados para serem estendidos.<br />Os c...
Pojo<br />
equals()<br />Quando NÃO usar:<br />A classe é única (Ex: Thread)<br />Não há interesse em teste lógico.<br />Superclasse ...
equals()<br />Contrato<br />Reflexivo<br />x.equals(x) returntrue;<br />Simétrico<br />x.equals(y) returntrue;<br />y.equa...
EqualsBuilder<br />org.apache.commons.lang.builder.EqualsBuilder;<br />Se necessário<br />Two Objects that compare as equa...
hashCode()<br />Sempre sobreponha hashCode ao sobrepor equals (contrato Object.hashCode).<br />Objetos iguais devem ter o ...
hashCode()<br />Atenção<br />Float: usar Float.floatToInBits(f);<br />Double: usar Double.doubleToInBits(d);<br />
org.apache.commons.lang.builder.HashCodeBuilder;<br />you pick a hard-coded, randomly chosen, non-zero, odd number ideally...
toString()<br />Contrato: <br />“representação concisa, mas informativa, que seja fácil para uma pessoa ler”<br />“Pojo@f9...
ToStringBuilder<br />org.apache.commons.lang.builder.ToStringBuilder;<br />org.apache.commons.lang.builder.ToStringStyle;<...
ToStringBuilder<br />org.apache.commons.lang.builder.ToStringBuilder;<br />org.apache.commons.lang.builder.ToStringStyle;<...
compareTo()<br />Indica a ordem natural da classe.<br />Permite comparações em ordem.<br />Contrato:<br />Mesmo contrato u...
CompareToBuilder<br />org.apache.commons.lang.builder.CompareToBuilder;<br />
Comparator<br />Necessitamos de ordenação diferente da ordenação padrão da classe.<br />Necessitamos de mais de um tipo de...
TipoOrdenação<br />Comparator<br />AdminAlunosComparator comparator = new AdminAlunosComparator(column, ascending);<br />C...
Fim<br />Obrigado!<br />
Upcoming SlideShare
Loading in …5
×

Equals, Hashcode, ToString, Comparable e Comparator

3,290 views

Published on

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

Published in: Technology
  • Be the first to comment

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 />

×