关于以下片段的一些解释:
我搞砸了一些蓝牙发现电话。为此,我正在使用回调,如果找到BluetoothDevice
,将调用该回调。如果未找到设备,则参数为null:
@Override
public void provideDevice(BluetoothDevice device) {
super.provideDevice(device);
Log.v("MainActivity","device name = " +device.getName());
if(device != null) {
mBinder.start(device);
} else {
Toast.makeText(this, "No Device found", Toast.LENGTH_SHORT).show();
}
}
Eclipse告诉我else块是死代码。
如果我在if-block中移动Log
调用,则警告消失:
@Override
public void provideDevice(BluetoothDevice device) {
super.provideDevice(device);
if(device != null) {
Log.v("MainActivity","device name = " +device.getName());
mBinder.start(bc);
} else {
Toast.makeText(this, "No Device found", Toast.LENGTH_SHORT).show();
}
}
我知道如果参数为null,第一个片段将抛出NPE。这不是本例中的问题。
我想知道dead code warning
出现的原因。
我可以提供完整的代码,如果这还不足以告诉我发生了什么。
答案 0 :(得分:5)
您在日志语句中取消引用device
。
如果你超过了这行代码,那么device
就不能为空,因为如果是的话,你会得到一个NPE。
这意味着else
语句是多余的,因为如果代码到达那么远,则不能是null
。
答案 1 :(得分:1)
你的问题是,在第一个例子中,Java知道device != null
不可能是假的,因为如果它是null,你就会从log语句中得到一个NPE,并且不会达到那段代码。