Objekt Instanz erzeugen ohne Konstruktor aufzurufen

Thomas Darimont

Erfahrenes Mitglied
Hallo,

...insbesondere bei verschiedenen Serialisierungsverfahren ist das sehr nützlich:
(Wie man sieht bleiben die Instanzvariablen dieser Klasse dadurch mit ihrem Default-Wert initialisiert, die "richtgen" Werte werden dann später via Reflection gesetzt)
Java:
/**
 * 
 */
package de.tutorials;

import java.lang.reflect.Constructor;

import sun.reflect.ReflectionFactory;

/**
 * @author Tom
 */
public class CreateObjectWithoutConstructorCallExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    System.out.println(new Bubu());
    System.out.println("#######");

    Constructor<?> objectConstructor = Object.class.getConstructor();
    Constructor<?> constructor = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(
      Bubu.class, objectConstructor);
    Bubu bubu = (Bubu) constructor.newInstance();
    System.out.println(bubu);
  }

  static class Bubu {

    int value = 4711;
    String data = "Test";


    public Bubu() {
      System.out.println("XXX");
    }


    @Override
    public String toString() {
      return this.value + ": " + this.data;
    }
  }
}

Ausgabe:
Code:
XXX
4711: Test
#######
0: null

Wird so beispielsweise von der Serialisierungs-Bibliothek XStream http://xstream.codehaus.org/ intern verwendet.

Gruß Tom
 
Zurück