3 回答
TA贡献1856条经验 获得超17个赞
检查返回值是否为空。
if (myDList.findDodecahedron(label) != null)
findDodecahedron()如果没有找到任何东西,而不是新对象,则需要更新以返回 null。更改的初始值result将做到这一点:
Dodecahedron result = null;
另外,你可以摆脱index和result如果你只是立即返回形状,当你找到它。无需保存其索引,然后在循环结束后查找索引。
public Dodecahedron findDodecahedron(String label1In) {
for (Dodecahedron d : dList) {
if (d.getLabel().equalsIgnoreCase(label1In)) {
return d;
}
}
return null;
}
您还可以使用 Java 8 流进一步简化它:
public Dodecahedron findDodecahedron(String label1In) {
return dList.stream()
.filter(d -> d.getLabel().equalsIgnoreCase(label1In))
.findAny()
.orElse(null);
}
TA贡献1840条经验 获得超5个赞
您实际上是在此处实现空对象设计模式。您可以在findDodecahedron方法中明确说明这一点(旁注 - 为了优雅,我用 Java 8 样式的流替换了实现,但这并不是真正必需的):
public static final Dodecahedron NULL_DODECAHEDRON = new Dodecahedron("", "", 0);
public Dodecahedron findDodecahedron(String label1In) {
return dList.stream()
.filter(d -> d.getLabel().equalsIgnoreCase(label1In))
.findFirst()
.orElse(NULL_DODECAHEDRON);
}
然后在 if 条件下使用它:
if (!myDList.findDodecahedron(label).equals(NULL_DODECAHEDRON)) {
System.out.print(myDList.findDodecahedron(label));
} else {
System.out.print("\t\"" + label + "\" not found");
}
TA贡献1886条经验 获得超2个赞
如果你的方法不返回一个布尔值而是一个特定的对象,你应该将它分配给一个变量来利用它。您不会实例化特定对象并将其返回以像布尔值一样对其进行测试。正因为如此,您必须重复方法调用以第二次检索结果,因为您需要在 std 输出中打印它。它是无奈和重复的代码/处理。
这应该是这样的:
Dodecahedron obj = myDList.findDodecahedron(label)
if(obj != null) {
System.out.print(obj);
}
else {
System.out.print("\t\"" + label + "\" not found");
}
添加回答
举报