3

我收到此代码的死代码警告:

Topic topic = findTopicByID(point.getIDTopic());

if (topic != null)
{
   ...
}
else if (topic == null)
{
    // I get Dead code warning for every thing I write here!
}

有时当我收到警告但一切正常时,我重新启动 IDE 并且不再收到该警告!但这一次……

编辑:

public Topic findTopicByID(int IDTopic) {
    for (Topic topic : topics)
        if (topic.getID() == IDTopic)
            return topic;
    return null;
}

编辑:这里的完整代码:

Topic topic = Res.getSchedule().getTopicBox().findTopicByID(point.getIDTopic());
            Section section =     topic.findSectionByID(point.getIDSection());

            if (topic != null)
            {
                View rowView = inflater.inflate(R.layout.daily_day_day_row, lLDoneWorks, false);

                TextView tVLabel = (TextView) rowView.findViewById(R.id.daily_day_day_row_label);
                TextView tVNum = (TextView) rowView.findViewById(R.id.daily_day_day_row_num);
                TextView tVTopic = (TextView) rowView.findViewById(R.id.daily_day_day_row_topic);
                TextView tVSection = (TextView) rowView.findViewById(R.id.daily_day_day_row_section);

                int color = topic.getColor();
                tVLabel.setBackgroundColor(color);
                tVNum.setTextColor(color);
                tVTopic.setTextColor(color);
                tVSection.setTextColor(color);

                tVLabel.setText(topic.getName().substring(0,1).toUpperCase(Locale.US));
                tVNum.setText(Integer.toString(point.getCount()));
                tVTopic.setText(topic.getName());
                if (point.getIDSection() != Point.DEFAULT_SECTION)
                    tVSection.setText(section.getName());

                lLDoneWorks.addView(rowView);
            }
            else if (topic == null)
            {
                TopicArchived archivedTopic = Res.getSchedule().getTopicBox()
                            .findArchivedTopicByID(point.getIDTopic());
                    if (archivedTopic == null)
                        removedTopicsPoint += point.getCount();
                    else
                        archivedTopicsPoint += point.getCount();
            }
4

5 回答 5

3

你可以编码

if (topic != null)
{
   ...
}
else
{
   ...
} 

反而。

于 2013-10-19T19:46:54.007 回答
1

编译器很可能误解了条件的目标。将其重写为:

if (topic != null) {
   ...
}
else {
    // Code
}

在 else 条件下topic,逻辑上保证为空。如果它不为空,则该if块被占用并且else不会被占用。

于 2013-10-19T19:47:06.237 回答
1

看看你的代码。

if(topic != null) {
} else { // here topic definitely not null, so the your if is redundant.
}
于 2013-10-19T19:47:36.890 回答
1

我认为你所拥有的太过分了。为什么不只是:

if (topic != null)
{
    ...
}
else
{
    // It must be null if it gets here
}
于 2013-10-19T19:47:54.780 回答
1

这是因为这条线:

Section section =     topic.findSectionByID(point.getIDSection());

如果topic为 null,则那里有一个 NullPointerException,并且没有到达其余代码。因此,之后对它的空性进行的每一次检查topic都是无关紧要的:编译器知道topic在那一行之后它不为空。

您应该将该行放在if语句的第一个分支中。

于 2013-10-19T20:09:31.843 回答