Java:将内容从一个变量移动到另一个变量

标签 java variables reference clone

我目前正在使用 Java 开发一个国际象棋游戏,并且遇到了一个问题。棋盘的每个区域都可能有一个棋子,您可以通过输入以下内容来获得:

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

现在,当移动一 block 时,我想这样做:

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:收到答案后,我意识到,我的想法完全错误,并且错误是由一个简单的问题引起的......

最佳答案

问题出在 setPiece 方法中的 piece.setField(this); 行。就像当你设置一个 null 时,如何在 null 对象上调用 setField 。

所以只需在 `piece.setField(this); 之前放置一个空检查即可。

关于Java:将内容从一个变量移动到另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37303838/

相关文章:

java - 为什么 Spring 对待构造函数注入(inject)与 setter/field 注入(inject)不同?

java - Java 上的 "T..."是什么?

java - 为什么java方法返回相同的结果?

bash - 如何排除 "$*"中的 bash 输入参数

C++ - 引用,参数中的指针

java - gremlin 通过 incr 查询排序

javascript/jquery 语法差异,声明新变量

iOS - 更新变量值的 UI 已更改

c - 如何在 C 中通过引用来引用二维字符数组

reference - 按引用而不是按值复制文件夹?