0

关于以下片段的一些解释:
我正在处理一些蓝牙发现调用。为此,我使用了一个回调,如果 aBluetoothDevice被发现或没有,它将被调用。如果未找到设备,则参数为空:

@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 块是死代码。

如果我Log在 if-block 中移动呼叫,则警告消失:

@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();

    }
}

我知道如果参数为空,第一个片段会抛出 NPE。这不是这个例子中的问题。

我想知道为什么会dead code warning出现。

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

4

2 回答 2

5

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

如果您通过了那行代码,device 则不能为空,因为如果是,您将获得 NPE。

这意味着该else语句是多余的,因为如果代码走得那么远,它就不可能是null.

于 2013-11-09T15:16:29.730 回答
1

您的问题是,在第一个示例中,Java 知道不可能为device != nullfalse,因为如果它为 null,您将从 log 语句中获得 NPE,并且不会到达该代码。

于 2013-11-09T15:17:47.860 回答