我收到了此代码的死代码警告:
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();
}
答案 0 :(得分:3)
你可以编码
if (topic != null)
{
...
}
else
{
...
}
代替。
答案 1 :(得分:1)
编译器可能误解了条件的目标。将其改写为:
if (topic != null) {
...
}
else {
// Code
}
在else条件中,topic
在逻辑上保证为null。如果它不为空,则会if
阻止,else
不会。
答案 2 :(得分:1)
查看您的代码。
if(topic != null) {
} else { // here topic definitely not null, so the your if is redundant.
}
答案 3 :(得分:1)
我认为你所拥有的是过度杀伤力。为什么不呢:
if (topic != null)
{
...
}
else
{
// It must be null if it gets here
}
答案 4 :(得分:1)
这是因为这一行:
Section section = topic.findSectionByID(point.getIDSection());
如果topic
为null,则表示存在NullPointerException,并且未到达其余代码。因此,对topic
之后出现的空值的每次检查都是无关紧要的:编译器知道topic
在该行之后不为空。
您应该将该行放在if
语句的第一个分支中。