亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

動漫人物 2023-06-14 16:10:56
我想復制我實現的類對象,而不是按值作為參考順序。我的代碼有時會以奇怪的方式運行。這是我的班級元素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。第二個函數非常簡單,但我不認為錯誤發生在那里。
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

您將向您的類和一些構造函數添加一個復制方法。


    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;


查看完整回答
反對 回復 2023-06-14
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

在您的代碼中,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 的處理方式。


查看完整回答
反對 回復 2023-06-14
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

關于“復制”部分,您可以在元素類中創建復制構造函數或方法。


構造函數:


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();

我無法回答第二個問題,因為您沒有解釋該方法的作用。


查看完整回答
反對 回復 2023-06-14
  • 3 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號