Vérifier l'implémentation de Java toString ()

Une méthode toString qui renvoie une représentation sous forme de chaîne d'un objet en Java. Je l'utilise généralement correctement, mais j'ai vérifié la mise en œuvre du contenu

Introduction (exemple d'utilisation)

Hoge.java


public class Hoge{
  @Override 
  public String toString(){
    return "Cette classe est la classe Hoge.";
  }
}

Test1.java


public class Test1{
  public static void main(String[] args){
    Object hoge = new Hoge();
    System.out.println(hoge);
  }
}

Si vous remplacez la méthode toString de manière appropriée comme ceci, C'est une fonction pratique qui affiche de bonnes choses simplement en la mettant dans l'argument de l'impression. (Le calcul lorsqu'il peut être interprété comme une chaîne de caractères est également bien géré.)

Confirmation de la mise en œuvre

Cette fois, je voudrais confirmer cette implémentation.

Tout d'abord, à partir de Description du document.

Renvoie une représentation sous forme de chaîne de l'objet. En général, la méthode toString renvoie une chaîne qui "représente textuellement" cet objet. Ce résultat doit être concis et informatif pour la lisibilité humaine. Nous vous recommandons de remplacer cette méthode pour toutes les sous-classes. La méthode toString de la classe Object renvoie une chaîne composée du nom de la classe d'origine dans laquelle l'objet est une instance, du caractère atmark "@" et d'une représentation hexadécimale non signée du hashcode de l'objet. Autrement dit, cette méthode renvoie une chaîne égale aux valeurs suivantes:

getClass().getName() + '@' + Integer.toHexString(hashCode())

La méthode toString est implémentée dans la classe Object et par défaut Le nom de la classe et le code de hachage sont affichés.

La classe Object est une superclasse de toutes les classes Java, Toutes les classes ont une méthode toString.

Utilisation de toString

La méthode toString est généralement gérée comme ceci J'ai deviné.

  1. Conversion d'objet en chaîne (explicite)
  2. Opérateur de jointure de chaîne (implicite)

Vérifions si cette hypothèse est correcte.

Conversion d'objet en chaîne

Par exemple, l'implémentation de System.out.println

Par conséquent, lorsque Object est utilisé comme argument Vérification de l'implémentation de System.out.println,

PrintStream.java



    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }

De cette façon, nous appelons Object # valueOf ().

String.java


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

Vérification de l'implémentation de la classe String, Si l'objet argument n'est pas nul, toString est appelé. (Évitez NullPointer)

Opérateur de jointure de chaîne

La jointure avec l'opérateur de jointure de chaîne est basée sur la "Spécification du langage Java". Le traitement diffère selon la version. Comme c'est compliqué, je vais omettre les détails, mais par l'opérateur de jointure de chaîne + Le code semble être traité comme StringBuilder.append () dans les coulisses.

L'image ressemble à ceci.

Test2.java


public class Test2{
  public static void main(String[] args){
    "time: " + new Date();
    // new StringBuilder().append("time: ").append(new Date());
  }
}

Par conséquent, vérifions l'implémentation de StringBuilder.

StringBuilder.java


    @Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
    }

Ah ...


# Au fait

Le tableau n'affiche pas le contenu de la liste, contrairement à la liste des tableaux.
Parfois, il est difficile de se tromper.

ArrayList superclasse, AbstractCollection
J'ai remplacé toString.


#### **`AbstractCollection.java`**
```java

  public String toString() {
       Iterator<E> it = iterator();
       if (! it.hasNext())
           return "[]";

       StringBuilder sb = new StringBuilder();
       sb.append('[');
       for (;;) {
           E e = it.next();
           sb.append(e == this ? "(this Collection)" : e);
           if (! it.hasNext())
               return sb.append(']').toString();
           sb.append(',').append(' ');
       }
   }
```

Apparemment, [le tableau est défini par la spécification du langage](https://docs.oracle.com/javase/specs/jls/se10/html/jls-10.html#jls-10.7)
En regardant cela, c'est comme ça parce que la méthode toString n'est pas remplacée.

```java
class A<T> implements Cloneable, java.io.Serializable {
   public final int length = X;
   public T[] clone() {
       try {
           return (T[])super.clone();
       } catch (CloneNotSupportedException e) {
           throw new InternalError(e.getMessage());
       }
   }
}
```

La longueur du cri du débutant, était-il définitif dans votre public ...


# À la fin

toString Pratique.


Recommended Posts

Vérifier l'implémentation de Java toString ()
Vérification de la version Java
Processus de vérification Java
Implémentation de l'interpréteur par Java
Implémentation Boyer-Moore en Java
Implémentation du tri de tas (en java)
[Implémentation] Notes de classe de processus java
Vérifier la méthode privée de l'interface Java9
[Java] Implémentation du réseau Faistel
[Java] Méthode d'implémentation du traitement du minuteur
Vérifiez la connexion https avec Java
Implémentation Java de tri-tree
[Java 8] Suppression en double (et vérification en double) avec Stream
[Java] Vérification de l'existence des éléments avec Stream
Java
Vérifier les paramètres Java dans les pods Kubernetes
Exemple de description et d'implémentation de BloomFilter (JAVA)
[Java] Exemple de contrôle de duplication de période de date
Java
Implémentation d'une fonction similaire en Java
Comment vérifier Java installé sur Mac
Implémentation de la méthode de clonage pour Java Record
Implémentation de DBlayer en Java (RDB, MySQL)
Vérifiez le contenu du magasin de certificats Java
Mémo: [Java] Vérifiez le contenu du répertoire
[Java] Comment utiliser la méthode toString ()
Implémentation Java pour créer et résoudre des labyrinthes
Essayez d'utiliser l'API REST de JobScheduler - implémentation Java RestClient--
Présentation du test Java automatisé avec JUnit 5 + Gradle
[Java] Nouvelle spécification Implémentation de l'API de recherche de produits Yahoo!
[Java] Vérifiez le nombre d'occurrences de caractères
Vérifier l'utilisation du tas avec Java Flight Recorder
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?