Java - 将对象设置为null

时间:2016-02-24 01:31:29

标签: java object null variable-assignment reset

我已经看到有类似的问题,但它们似乎相当适合实际删除对象引用和诸如此类的东西。我正在处理我正在处理的游戏的库存系统,并且依赖于项目拾取/交换/放下,基于槽是否包含空对象。

这是我的一点代码:

public void buttonPressed(int buttonID) {
    if(buttonID < slots.length) {
        if(inHand == null) {
            if(slots[buttonID].storedItem != null) {
                inHand = slots[buttonID].storedItem;
                slots[buttonID].storedItem = null;
            }
        } else {
            if(slots[buttonID].storedItem == null) {
                slots[buttonID].storedItem = inHand;
                inHand = null;
            } else {
                Item swapSpot = inHand;
                inHand = slots[buttonID].storedItem;
                slots[buttonID].storedItem = swapSpot;
            }
        }
    }
}

检查工作正常,但是当运行第一个if语句中的代码(slots [buttonID] .storedItem!= null)时,Object&#39; storedItem&#39;在数组的指定槽中没有设置为null。如果那里已经存在某些东西,我真诚地道歉,但我不能围绕那些人说的话。

编辑:我修复了它 - 我共享的代码没有任何问题,但是我的MouseListener的实现存在问题。简而言之,它是双重注册的,一旦你拿到一件物品,它就会立即被放回原位。

1 个答案:

答案 0 :(得分:2)

如果结构不是大多数,那么无论值是否为空,交换都将起作用。让我们假设0作为buttonID传递,inHand中存储了一个项目,但是插槽0中没有项目。

public void buttonPressed(int buttonID) {
    if(buttonID < slots.length) {
        //The item in inHand is now placed into swapSpot
        Item swapSpot = inHand;
        //The null value in slots[buttonID].storedItem is now placed in inHand
        inHand = slots[buttonID].storedItem;
        //The item previously in inHand is now placed in slots[buttonID].storedItem
        slots[buttonID].storedItem = swapSpot;
    }
}

我不确定为什么你的代码不能正常工作,它看起来应该有效,但显然有一些错误,乍一看是不可见的。尝试像这样简化它。较简洁的代码往往不易出错,因为它更容易管理逻辑。