• Save
Equals, Hashcode, ToString, Comparable e Comparator
Upcoming SlideShare
Loading in...5
×
 

Equals, Hashcode, ToString, Comparable e Comparator

on

  • 2,967 views

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

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

Statistics

Views

Total Views
2,967
Views on SlideShare
2,828
Embed Views
139

Actions

Likes
1
Downloads
0
Comments
0

3 Embeds 139

http://blog.rdgc.com.br 127
http://webtoolsinclass.blogspot.com 9
http://www.linkedin.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Equals, Hashcode, ToString, Comparable e Comparator Equals, Hashcode, ToString, Comparable e Comparator Presentation Transcript

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