【发布时间】:2016-06-06 02:56:32
【问题描述】:
我已经看到有与此类似的问题,但对于实际删除对象引用和诸如此类的东西来说,它们似乎相当小众。我正在为我正在开发的游戏开发库存系统,并根据插槽是否包含空对象来依赖物品拾取/交换/放下。
这是我的一小段代码:
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 'storedItem' 未设置为 null .如果那里已经有一些东西,我真诚地道歉,但我无法理解人们在说什么。
编辑:我已修复它 - 我共享的代码没有任何问题,但我的 MouseListener 的实现存在问题。长话短说,它是双重注册的,一旦你拿起一件物品,它就会立即被放下。
【问题讨论】:
-
在我看来,这段代码应该可以正常工作 - 您如何检查并发现该字段未设置为 null?
-
你试过用调试器单步调试吗?我认为它不太可能运行该语句,但如果是其他代码,则必须将其设置回非空值。
-
slots[]是什么类型的? -
这里有术语问题。没有将对象设置为空的事情。您可以将 variables 设置为 null。
-
回答你所有的问题:slots[] 是一个大小为 4 的“Slot”类型的数组,我知道是因为我有一个空安全打印功能并且只使用标准打印,我还没有尝试过。我会尽快试一试。
标签: java object null variable-assignment reset