[JAVA] Créer un objet sans passer par le constructeur

Dans les cas suivants, l'objet est créé sans utiliser le constructeur. ・ Lors du clonage ・ Lors de la désérialisation

Exécutez ce programme et assurez-vous que le "Constructeur" n'est affiché qu'une seule fois

Tips0013.java


package jp.avaj.lib.algo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import jp.avaj.lib.test.L;

class Tips0013 {
  public static void main(String[] args) throws CloneNotSupportedException, FileNotFoundException, IOException, ClassNotFoundException {
    //
    Data data = new Data();
    //
    L.p("Exécuter le clonage");
    Data copyData = (Data)data.clone();
    //
    L.p("Exécuter la sérialisation");
    String filename = "./Tips0013.txt";
    ObjectOutputStream oos = null;
    try {
      oos = new ObjectOutputStream(new FileOutputStream(filename));
      oos.writeObject(data);
    }
    finally {
      oos.close();
    }
    L.p("Exécutez la désérialisation");
    ObjectInputStream ois = null;
    try {
      ois = new ObjectInputStream(new FileInputStream(filename));
      Data newData = (Data)ois.readObject();
    }
    finally {
      ois.close();
    }
    //Supprimer le fichier de travail
    File workFile = new File(filename);
    workFile.delete();
    L.p("Sortie de traitement");
  }

  private static class Data implements Cloneable,Serializable {
    private String v;
    public Data() {
      v = "aaaa";
      L.p("constructeur");
    }
    public Object clone() throws CloneNotSupportedException {
      return super.clone();
    }
  }
}

Le résultat est le suivant.

tips0014.txt


constructeur
Exécuter le clonage
Exécuter la sérialisation
Exécutez la désérialisation
Sortie de traitement

Recommended Posts

Créer un objet sans passer par le constructeur
Y a-t-il une instance même si le constructeur échoue?
Parlez de passer par le chemin source lorsque delombok