在 Java 中按值克隆对象的方法 - 而不是按引用

我想复制我实现的类对象,而不是按值作为参考顺序。


我的代码有时会以奇怪的方式运行。


这是我的班级元素


public class Element {

    int x;

    int y;

    public Element(){


    }


    public int getX() {

        return x;

    }


    public int getY() {

        return y;

    }


    public void setX(int x) {

        this.x = x;

    }


    public void setY(int y) {

        this.y = y;

    }

}

我正在使用的示例代码:


public void fourthTurnElement6(){

    MainLoopClass.helpTurn=false;

    Element element1=firstPoint;

    Element element2=secoundPoint;

    Element element3=thirdPoint;

    Element element4=fourthPoint;

    element1.setX(firstPoint.getX());

    element1.setY(firstPoint.getY()+1);

    element2.setX(firstPoint.getX()+1);

    element2.setY(firstPoint.getY());

    element3.setX(firstPoint.getX()+1);

    element3.setY(firstPoint.getY()-1);

    element4.setX(thirdPoint.getX()+1);

    element4.setY(thirdPoint.getY());



    if(HelperMethods.detectTurnColision(element1,element2,

        element3,element4)){

            return;

    }


    if(HelperMethods.detectTurnRightWallColision(element1,

        element2,element3,element4)){

            return;

    }

    firstPoint=element1;

    secoundPoint=element2;

    thirdPoint=element3;

    fourthPoint=element4;

是否有可能有时它会正常工作但有时却不能?在我的代码中似乎detectTurnColision工作正常但问题是detectTurnRightWallColision。第二个函数非常简单,但我不认为错误发生在那里。


动漫人物
浏览 119回答 3
3回答

沧海一幻觉

您将向您的类和一些构造函数添加一个复制方法。    public class Element {        int x;        int y;        public Element(){        }        public Element(int x, int y) {        }        public Element copy() {            return new Element(x, y);        }        public int getX() {            return x;        }        public int getY() {            return y;        }        public void setX(int x) {            this.x = x;        }        public void setY(int y) {            this.y = y;        }    }        Element element = new Element(0, 0);        Element secondElement = element.copy();        assert element != secondElement;

jeck猫

在您的代码中,element1 和 firstPoint 是同一个对象,这是您想要的吗?另外,当你设置element2和element3为firstPoint时,之前已经修改过了。这可能是一种不需要的副作用。element1,2,3,4 必须是独立的对象:Element element1 = new Element()Element element2 = new Element()Element element3 = new Element()Element element4 = new Element()然而,Jason 的解决方案更好,因为这就是 Java 的处理方式。

明月笑刀无情

关于“复制”部分,您可以在元素类中创建复制构造函数或方法。构造函数:public Element(Element element){    this.x = element.x    this.y = element.y}// ToDo handle null argument if needed if(element==null)return; // values will be set to 0.例子:Element element1 = new Element();Element element2 = new Element(element1);方法:public Element clone(){    Element newCloneElement = new Element();    newCloneElement.x = x;    newCloneElement.y = y;    return newCloneElement;}// The above method can implemented as static with an Element argument// and the values will be copied from the argument.例子:Element element1 = new Element();Element element2 = element1.clone();我无法回答第二个问题,因为您没有解释该方法的作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java