Hat Java einen Standardkopiekonstruktor als C++? Wenn es eins hat - bleibt es verwendbar, wenn ich explizit einen anderen Konstruktor (keinen Kopierkonstruktor) deklariere?Hat Java einen Standard-Kopierkonstruktor (wie in C++)?
Antwort
Java hat keine eingebauten Kopierkonstruktoren.
Aber Sie können Ihre eigenen Konstruktoren schreiben. Sehen Sie ein Beispiel unten:
class C{
private String field;
private int anotherField;
private D d;
public C(){}
public C(C other){
this.field = other.field;
this.anotherField = other.anotherField;
this.d = new D(other.d); //watch out when copying mutable objects; they should provide copy constructors, as well. Otherwise, a deep copy may not be possible
}
//getters and setters
}
class D{//mutable class
//fields
public D(D other){
//this is a copy constructor, like the one for C class
}
}
Das ist richtig. –
@RomanVottner Um zu erweitern, ist dies nicht immer einfach, besonders wenn Sie eines der veränderbaren Felder nicht ändern können, um ihm einen Kopierkonstruktor zu geben. – Cruncher
Java verfügt nicht über einen Standardkopiekonstruktor. Sie müssen es selbst definieren.
Nein, es gibt keinen Standardkopiekonstruktor. Ein Standardkonstruktor.
Sie müssen für Ihre Klasse keine constructors angeben, aber Sie müssen dabei vorsichtig sein. Der Compiler stellt automatisch einen Konstruktor ohne Argumente für jede Klasse ohne Konstruktoren zur Verfügung. Dieser Standardkonstruktor wird den Konstruktor ohne Argumente der Oberklasse aufrufen. In dieser Situation wird sich der Compiler beschweren, wenn die Superklasse keinen Konstruktor ohne Argumente hat, also müssen Sie überprüfen, ob dies der Fall ist. Wenn Ihre Klasse keine explizite Oberklasse hat, dann hat sie eine implizite Oberklasse von Object, die einen Konstruktor ohne Argumente hat.
Normalerweise stelle ich ein ein wie,
public class CopyConEx {
/**
* Regular constructor.
*/
public CopyConEx(type field1, type field2) {
this.field1 = field1;
this.field2 = field2;
}
/**
* Copy constructor.
*/
public CopyConEx(CopyConEx aCopyConEx) {
this(aCopyConEx.getField1(), aCopyConEx.getField2());
}
Es ist ein Copykonstruktor (aber nicht Standard eins), aber es sollte ausdrücklich aufgerufen werden (In C++, es wird werden implizit bei Bedarf) genannt:
public MyClass(MyClass toCopy) {
someField = toCopy.someField;
}
Java unterstützt Klonen, aber nicht kopieren Konstruktor. Im Folgenden finden Sie eine URL zum Klonen von Java.
http://adtmag.com/articles/2000/01/18/effective-javaeffective-cloning.aspx
Wenn Sie eine der anderen Antworten lesen, werden Sie natürlich feststellen, dass Java Kopierkonstruktoren unterstützt. Sie sind einfach nicht da von * default *, noch mehr als 'clone()' wird standardmäßig unterstützt (Sie müssen 'Cloneable' implementieren und' clone() 'selbst definieren). (Und Ihr Artikel ist fast 14 Jahre alt ... nicht sicher, ich würde immer noch etwas in den Tagen von Java 1.2 geschrieben vertrauen.) – dcsohl
wie C++, Java unterstützt auch Copykonstruktor. Im Gegensatz zu C++ erstellt Java keinen Standardkopiekonstruktor, wenn Sie keinen eigenen erstellen.
Siehe auch write a Copy Constructor using Deep copy.
nur zum Hinzufügen von Java erstellt keine Standardkopie coz gibt es nicht viel dafür in normalen Situationen. Es ist nur per Referenz in Java. – Anugoonj
In Java die Bereitstellung eines automatischen Copykonstruktor sinnlos wäre.
Java benötigt keinen, da Sie nur Referenzen auf Objekte haben können. (In C++ können Sie Objekte als Wert übergeben, so dass die Grammatik eine automatische Objektkopie ermöglichen muss).
Wenn Sie tiefe Kopien eines Objekts in Java erstellen müssen, implementieren Sie Cloneable
.
- 1. Hat Java Attribute wie C#?
- 2. Hat C einen String-Typ?
- 3. Hat C einen Verkettungsoperator?
- 4. hat Java etwas ähnlich wie C# Eigenschaften?
- 5. Hat Java einen exponentiellen Operator?
- 6. Hat Java "Eigenschaften", die genauso funktionieren wie Eigenschaften in C#?
- 7. Hat Swift einen impliziten Objektinitialisierer, wie in C#?
- 8. Java: Hat die Objektklasse einen Konstruktor?
- 9. Hat Java (Swing) einen solchen Knopf?
- 10. Warum hat Java einen IINC-Bytecode-Befehl?
- 11. Wann hat Java einen JIT-Compiler bekommen?
- 12. Warum hat Java keine automatischen Eigenschaften wie C#?
- 13. Hat der Intel C++ Compiler einen Ressourcencompiler?
- 14. Wie funktioniert "object.new"? (Hat Java einen .new-Operator?)
- 15. C-Variable hat schon einen Wert?
- 16. Hat Java Schnittstellen erfunden?
- 17. Wie hat C# System.Type Typ einen Namen Eigenschaft
- 18. Hat Java automatische Eigenschaften?
- 19. Hat Python einen Schalter "nur kompilieren" wie Perls -c?
- 20. Hat die Klasse ohne Datenelement einen Speicherbedarf in Java?
- 21. Hat Objective-C einen Garbage Collector auf dem iPhone?
- 22. , wie ein Betreiber hat einen expliziten Parameter c machen ++
- 23. Hat Dart einen Scheduler?
- 24. Wie Sie einen C# -Webdienst in Java aufrufen?
- 25. Hat Java einfach nicht gehalten?
- 26. Wie man einen Modellmanager in Symfony2 hat?
- 27. hat Int einen Operator ==
- 28. Warum hat C++ noch einen Lösch- [] UND einen Löschoperator?
- 29. PreparedStatement.addBatch in Java hat Einschränkungen?
- 30. Warum hat Java neue?
Mit einem Kopierkonstruktor meinen Sie einen Konstruktor, der ein Objekt des gleichen Typs akzeptiert und dupliziert? Wenn ja - dann nein, Java hat das nicht. – Cruncher
Nein, es hat keinen standardmäßigen Kopierkonstruktor. –
http://stackoverflow.com/questions/827785/why-doesnt-java-have-a-copy-constructor – Cruncher