簡體   English   中英

Java:將內容從一個變量移到另一個

[英]Java: Move content from one variable to another

我目前正在使用Java開發國際象棋游戲,但遇到一個問題。 棋盤的每個字段上都可能有一塊棋子,您可以通過輸入以下內容獲得:

field.getPiece() //null or Piece-object

現在,當移動一塊時,我想這樣做:

field2.setPiece( field1.getPiece() );
field1.setPiece( null );

問題是,field1保留了片段的引用,並用null覆蓋它,以便片段被刪除。 所以我的問題是:如何將變量的內容/引用移到另一個變量,而又不要將兩個變量都指向同一個引用?

順便說一句:我知道,我可以克隆我的作品,然后刪除舊作品,但我希望有一種更有效的方法。

編輯:相關代碼:

public class Field {
    private Piece piece;

    public Piece getPiece(){ return piece; }

    public void setPiece(Piece piece){
        this.piece = piece;
        piece.setField(this);                //Tell the piece on what field it is (to get position etc.) [LINE 53]
    }
}

public abstract class Piece {
    protected Field field;
    public void setField(Field field){
        this.field = field;
    }
}  

field2.setPiece(field1.getPiece());
field1.setPiece(null);

錯誤:

java.lang.NullPointerException: Attempt to invoke virtual method 'void [...].Piece.setField(Field)' on a null object reference
at [...].Field.setPiece(Field.java:53)

刪除代碼中的最后一行( field1.setPiece(null); )時,它可以正常工作(不會崩潰)

EDIT2:收到答案后,我意識到我的想法完全錯誤,並且該錯誤是由一個簡單的問題引起的...

問題出在piece.setField(this); setPiece方法中的一行。 就像當您將片段設置為null時,如何在null對象上調用setField一樣。

因此,只需在piece.setField(this);之前放置一個空檢查。

您正在Field#setPiece方法中獲取NullPointerException ,因為您試圖在piece為null時調用piece.setField(this) 所以像這樣重寫代碼

public void setPiece(Piece piece){
    this.piece = piece;
    if (piece != null) {
        piece.setField(this);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM