任何人都可以解释这个“死代码”的例子吗?

时间:2013-11-09 15:08:18

标签: java android eclipse if-statement dead-code

关于以下片段的一些解释:
我搞砸了一些蓝牙发现电话。为此,我正在使用回调,如果找到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出现的原因。

我可以提供完整的代码,如果这还不足以告诉我发生了什么。

2 个答案:

答案 0 :(得分:5)

您在日志语句中取消引用device

如果你超过了这行代码,那么device 就不能为空,因为如果是的话,你会得到一个NPE。

这意味着else语句是多余的,因为如果代码到达那么远,则不能是null

答案 1 :(得分:1)

你的问题是,在第一个例子中,Java知道device != null不可能是假的,因为如果它是null,你就会从log语句中得到一个NPE,并且不会达到那段代码。