[英]Java move <Preference> from one PreferenceScreen to another?
[英]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.