Java:将内容从一个变量移动到另一个变量
Java: Move content from one variable to another
我目前正在使用 Java 开发国际象棋游戏,我遇到了一个问题。棋盘的每个区域都可能有一个棋子,你可以输入:
field.getPiece() //null or Piece-object
现在,当移动一个 Piece 时,我想这样做:
field2.setPiece( field1.getPiece() );
field1.setPiece( null );
问题是,field1保留了片段的引用,并用null覆盖了它,所以片段被删除了。所以我的问题是:如何将一个变量的内容/引用移动到另一个变量,而不将两个变量指向同一个引用?
顺便说一句:我知道,我可以克隆我的 Piece,然后删除旧的,但我希望有更有效的方法来做到这一点。
编辑:
相关代码:
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: 收到答案后,我意识到,我上面的想法是完全错误的,错误是由一个简单的问题引起的...
问题出在 setPiece 方法中的 piece.setField(this);
行。当你设置一块 null 时,你如何在 null 对象上调用 setField。
所以只需在`piece.setField(this);.
之前放置一个空检查
您在 Field#setPiece 方法中得到 NullPointerException,因为您尝试在片段为 null
时调用 piece.setField(this)
。所以像这样重写代码
public void setPiece(Piece piece){
this.piece = piece;
if (piece != null) {
piece.setField(this);
}
}
我目前正在使用 Java 开发国际象棋游戏,我遇到了一个问题。棋盘的每个区域都可能有一个棋子,你可以输入:
field.getPiece() //null or Piece-object
现在,当移动一个 Piece 时,我想这样做:
field2.setPiece( field1.getPiece() );
field1.setPiece( null );
问题是,field1保留了片段的引用,并用null覆盖了它,所以片段被删除了。所以我的问题是:如何将一个变量的内容/引用移动到另一个变量,而不将两个变量指向同一个引用?
顺便说一句:我知道,我可以克隆我的 Piece,然后删除旧的,但我希望有更有效的方法来做到这一点。
编辑: 相关代码:
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: 收到答案后,我意识到,我上面的想法是完全错误的,错误是由一个简单的问题引起的...
问题出在 setPiece 方法中的 piece.setField(this);
行。当你设置一块 null 时,你如何在 null 对象上调用 setField。
所以只需在`piece.setField(this);.
之前放置一个空检查您在 Field#setPiece 方法中得到 NullPointerException,因为您尝试在片段为 null
时调用 piece.setField(this)
。所以像这样重写代码
public void setPiece(Piece piece){
this.piece = piece;
if (piece != null) {
piece.setField(this);
}
}