Meistens erzeugt man Objekte in Java mit new. Es gibt aber noch ein paar andere Möglichkeiten.
Wir haben diese Farbe Testklasse:
package de.wenzlaff.mqtt.client;
import java.io.Serializable;
/**
* Farben Klasse.
*
* @author Thomas Wenzlaff
*
*/
public class Farbe implements Cloneable, Serializable {
private static final long serialVersionUID = 8660877851154300583L;
private String farbe = "rot";
public Farbe() {
System.out.println("Konstruktor aufruf");
}
public String getFarbe() {
return farbe;
}
public void setFarbe(String farbe) {
this.farbe = farbe;
}
@Override
public String toString() {
return "Farbe: " + farbe + " mit HashCode=" + hashCode() + "\n";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((farbe == null) ? 0 : farbe.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Farbe other = (Farbe) obj;
if (farbe == null) {
if (other.farbe != null)
return false;
} else if (!farbe.equals(other.farbe))
return false;
return true;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
und haben diese Möglichkeiten Objekte zu erzeugen.
package de.wenzlaff.mqtt.client;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
/**
* Beispiel für die unterschiedlichen Möglichkeiten der Objekterzeugung.
*
* @author Thomas Wenzlaff
*
*/
public class NeueObjekte {
private static final String FARBE_DATEI = "farbe.obj";
public static void main(String[] args) throws Exception {
// es wird ein neues Objekt erzeugt, und implizit der Konstruktor ohne
// Parameter aufgerufen, das ist der normale Weg
Farbe eins = new Farbe();
eins.setFarbe("erste Test Farbe");
System.out.println("1. Test: " + eins);
// es geht aber auch über die newInstance der Class Klasse über
// Reflections
// hier kann es zu einer java.lang.ClassNotFoundException kommen
Farbe zwei = (Farbe) Class.forName("de.wenzlaff.mqtt.client.Farbe").newInstance();
zwei.setFarbe("zweite Test Farbe");
System.out.println("2. Test: " + zwei);
// 3. Möglichkeit
Farbe drei = Farbe.class.newInstance();
drei.setFarbe("dritte Test Farbe");
System.out.println("3. Test: " + drei);
// oder über newInstance mit getConstructor
Constructor<Farbe> konstruktor = Farbe.class.getConstructor();
Farbe vier = konstruktor.newInstance();
vier.setFarbe("vierte Test Farbe");
System.out.println("4. Test: " + vier);
// oder mit Clone, dann muss die Klasse aber Cloneable implementieren,
// es wird aber kein Konstruktor aufgerufen!
Farbe fuenf = (Farbe) vier.clone();
fuenf.setFarbe("fünfte Test Farbe");
System.out.println("5. Test: " + fuenf);
// oder über Serialisation, dann muss die Klasse aber Serializable
// implementieren sonst kommt eine java.io.NotSerializableException
// zuerst mal ein Farb Objekt in eine Datei speichern
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FARBE_DATEI));
eins.setFarbe("sechste Test Farbe");
out.writeObject(eins);
out.close();
// und das Serialisierte Objekt, als Farbe einlesen, es wird auch kein
// Konstruktor aufgerufen!
ObjectInputStream in = new ObjectInputStream(new FileInputStream(FARBE_DATEI));
Farbe sechs = (Farbe) in.readObject();
in.close();
System.out.println("6. Test: " + sechs);
}
}
Das Ergebniss ist:
Konstruktor aufruf 1. Test: Farbe: erste Test Farbe mit HashCode=-1239076332 Konstruktor aufruf 2. Test: Farbe: zweite Test Farbe mit HashCode=-1601416519 Konstruktor aufruf 3. Test: Farbe: dritte Test Farbe mit HashCode=1712274465 Konstruktor aufruf 4. Test: Farbe: vierte Test Farbe mit HashCode=-122237158 5. Test: Farbe: fünfte Test Farbe mit HashCode=120364780 6. Test: Farbe: sechste Test Farbe mit HashCode=-1862501858
Kennt Ihr noch andere Möglichkeiten? Dann bitte posten oder liken.
Ähnliche Artikel:
- Generische Methoden
- Java Rätsel des Monats
- String „Fri Feb 05 17:15:59 CET 2010“ in Date Objekt umwandeln