Java是否有默认的复制构造函数(就像C++中一样)
Does Java have a default copy constructor (like in C++)?
Java是否有默认的复制构造函数作为C++?如果它有一个-如果我显式声明另一个构造函数(而不是复制构造函数),它是否仍然可用?
Java没有内置复制构造函数。
但是您可以编写自己的此类构造函数。参见以下示例:
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
}
}
Java没有默认的复制构造函数。你需要自己定义它。
有一个复制构造函数(但不是默认的),但它应该显式调用
public MyClass(MyClass toCopy) {
someField = toCopy.someField;
}
您不必为类提供任何构造函数,但在执行此操作时必须小心。编译器自动为任何没有构造函数的类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器会抱怨,因此您必须验证它是否有。如果你的类没有显式的超类,那么它有一个Object的隐式超类,它确实有一个无参数构造函数。
通常我会提供一个类似的
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());
}
Java支持克隆,但不使用复制构造函数。请在下面找到关于Java克隆的url。
http://adtmag.com/articles/2000/01/18/effective-javaeffective-cloning.aspx
在Java中,提供自动复制构造函数是毫无意义的。
Java不需要,因为您只能对对象进行引用。(在C++中,您可以按值四舍五入地传递对象,因此语法需要允许自动复制对象)。
如果您需要在Java中获取对象的深层副本,那么实现Cloneable
。
与C++一样,Java也支持复制构造函数。但是,与C++不同的是,如果您不编写自己的副本构造函数,Java就不会创建默认的副本构造函数。
另请参阅使用深度复制编写复制构造函数。
相关文章:
- 堆栈和队列是否像C++中的数组一样传递?
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- Java 是否像C++模板一样具有泛型推论?
- 是否可以将前向声明和常规声明合并到一个文件中,然后像分开一样使用它?
- 右值引用是否像右值引用一样工作
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- 空向量占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- C++中是否有一个功能可以创建一个像Python的"numpy.bmat"一样简单的块矩阵?
- 布尔表达式是否像使用 if 或 switch 进行分支一样繁琐?
- 我是否可以像访问自己的对象一样访问对象的'base part'?
- 使用类型推断声明变量是否与"classical way"变量名称后用括号初始化变量一样有效?
- c++ std 的 inf 的行为是否与常识无穷大完全一样
- 在C++中,A+=B 是否优于 A=A+B,就像 ++A 优于 A++ 一样
- 在Visual C++6.0 MFC中,CString是否可以像简单类型而不是类一样安全地处理
- 像儒略数字用于计算日期一样,是否有任何特定的数字来计算时间
- Java是否有默认的复制构造函数(就像C++中一样)
- 是否可以像现在一样轻松地编译Emscripten,但不需要控制台和Emscripten徽标
- 是否有可能使自己的winapi功能像getpixel一样在Windows上工作
- 是否可以像数组一样处理 std::vector