web-dev-qa-db-fra.com

Comment imprimer correctement le contenu d'un objet?

J'ai un ArrayList qui contient des objets de la classe User. Lorsque j'imprime ces objets, j'ai obtenu:

[Utilisateur @ 18fd984, Utilisateur @ 18fd984]

Comment imprimer ces objets de manière correcte?

12
Mohamed Gamal

Remplacez la méthode toString dans la classe pour produire la sortie que vous préférez, au lieu de la valeur par défaut que Java génère automatiquement. Exemple:

public class User {
   private String name;
   ...
   @Override
   public String toString() {
       return name;
   }
}

Pour les objets complexes, Apache Commons Lang fournit quelques méthodes pratiques, si vous utilisez déjà cette dépendance dans votre projet:

@Override
public String toString() {
   return ToStringBuilder.reflectionToString(this);
}
13
Guido

Regardez le code source de la méthode print(Object obj) de la classe PrintSteam:

public void print(Object obj)
{
    write(String.valueOf(obj));
}

et valueOf(Object obj) de String classe:

public static String valueOf(Object obj)
{
    return (obj == null) ? "null" : obj.toString();
}

Comme vous le voyez, obj.toString() est invoquée, et comme le dit @Guido García, la méthode toString() prioritaire est ce dont vous avez besoin.

L'implémentation par défaut de la méthode toString() dans la classe Object est la suivante:

public String toString()
{
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
1
Eng.Fouad