在一些代码审查期间,我发现了这行代码:
ScTyp lScTyp = (ScTyp) (lWorkspace.getScTyp() == null ? ChartFactory.BLANK_STRING : lWorkspace.getScTyp());
我有点困惑因为这行代码导致在关于项目中失败的Hudson构建。
原因:inconvertible types
我知道类型转换在这里是完全错误的。如果getScTyp()
为null
,则会尝试将String
(ChartFactory.BLANK_STRING
)投放到ScTyp
。
为什么Eclipse没有在这行代码中显示错误或至少出现警告?
答案 0 :(得分:2)
由于三元运算符可以求值为String或getScType返回,因此它将被计算为Object引用。将Object引用强制转换为任何其他类型都是完全可以的。
查看该行的另一种方法是
Object temp = lWorkspace.getScTyp() == null ? ChartFactory.BLANK_STRING : lWorkspace.getScTyp();
ScTyp lScTyp = (ScTyp)temp;
如果通过三元运算符的两条路径都返回ScTyp,那么就不需要进行强制转换。
我猜Eclipse最初在添加强制转换之前显示错误,有人通过添加强制转换来修复错误。然后隐藏了真正的错误。