Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在复制构造函数中设置深度复制?_Java_Deep Copy - Fatal编程技术网

Java 如何在复制构造函数中设置深度复制?

Java 如何在复制构造函数中设置深度复制?,java,deep-copy,Java,Deep Copy,我需要在我的point and segment类中将复制构造函数设置为deep copy,但我不确定是否正确。有人能帮我吗 公共类段实现了段接口{ //包含线段端点的两个点 专用点p1; 专用点p2; //将端点设置为新的默认构造函数 //值为0,0和4,4的点 公共部分{ //这是0,0,4,4; this.p1=新的点0,0; this.p2=新的点4,4; } //接受int-x1、int-y1、int-x2、int-y2的参数化构造函数 //并创建和设置端点 公共段int x1、int

我需要在我的point and segment类中将复制构造函数设置为deep copy,但我不确定是否正确。有人能帮我吗

公共类段实现了段接口{ //包含线段端点的两个点 专用点p1; 专用点p2; //将端点设置为新的默认构造函数 //值为0,0和4,4的点 公共部分{ //这是0,0,4,4; this.p1=新的点0,0; this.p2=新的点4,4; } //接受int-x1、int-y1、int-x2、int-y2的参数化构造函数 //并创建和设置端点 公共段int x1、int y1、int x2、int y2{ //此点p1=新点X1,y1; //this.p2=新的点x2,y2; 如果x1!=x2&&y1!=y2{ 此点p1=新点X1,y1; this.p2=新的点x2,y2; } 否则{ 抛出新的IllegalArgumentExceptionundefined; } } //接受点p1和点p2并设置两者的参数化构造函数 //端点指向传入点的深度副本。 公共交通点p1、p2{ 如果p1!=p2{ this.p1=新点p1.getX,p1.getY; this.p2=新点p2.getX,p2.getY; } 否则{ 抛出新的IllegalArgumentExceptionPoints不能有相同的值!; } } //复制接受段并初始化段数据的构造函数 //正在创建的新段与已创建的段相同 //收到。 公共部门及其他{ this.p1=other.p1; this.p2=other.p2; } 请考虑这不是全部代码!

我的重点是:

公共类点实现点接口{ //保持点的x值和y值 私人INTX; 私营企业; 公共int getX{ 返回x; } 公共设施{ 返回y; } //将值设置为0、0的默认构造函数 公共点{ 这个.x=0; 这个。y=0; } //参数化构造函数,将在x //坐标,然后是y //并将数据变量设置为接收到的值。 公共点int x,int y{ 这个.x=x; 这个。y=y; } //一个复制构造函数,它将接收一个点,然后初始化 //资料 //深度复制 公共点其他{ this.x=other.getX; this.y=other.getY; }
几乎很好。请将此构造函数用于段:

public Segment(Segment orig)
{
    this(orig.p1, orig.p2);
}

注意:如果你使你的Point类不可变,就没有必要进行深度复制…Java中没有复制构造函数。你可以自己编写类似的东西,但它的作用完全取决于你。编译器不关心它们,也没有任何额外的“设置”。我完全同意@OliverCharlesworth。你不需要o这样做。我17年来从未在Java中编写过“复制构造函数”或使用过clone。请将上一个构造函数的代码更改为public segmentSegmentOther{thisother.p1,other.p2;}。但我也推荐Oliver的建议。代码片段是用于可运行js的,不是用于java的,请删除它们。谢谢大家!实际上我是按照教授给我们的说明进行操作的,这就是为什么我需要使用该代码。谢谢Tom,它成功了!@EJP:不,他没有,仔细检查。