我有一个非常简单的 Java 代码,就像这样(这只是一个摘录):
for(;;)
{
AnObject object = null;
for(AnObject elem : list) // where the list is of the type List<AnObject>
{
if(<some dynamic condition goes here>)
{
object = elem;
}
}
Log.v(TAG, object.property); // was initially omitted, added for the answer
// more code skipped for simplicity
if(object == null)
{ //
break; //
} // this all is marked as dead code
}
在 Eclipse 中,带有注释的片段被标记为死代码。为什么?条件中没有final
元素。除了循环的最开始,该object
变量不会在任何地方分配给常量 null,在此之后它通常应该被覆盖,但它并不总是发生。object
可以很好地为空和非空。
我错过了什么吗?
答案
好吧,我找到了答案,为了展示它,我必须在我的示例中添加一行代码,我在尝试简化代码摘录时无意中省略了这行代码,但这很重要。该行是:
Log.v(TAG, object.property);
所以对象必须是非空的,否则代码无法通过异常访问。此行是出于调试目的临时添加的,这就是我不考虑它的原因。