不可思议的类型,但没有警告或错误?

时间:2013-07-19 11:01:03

标签: java eclipse hudson

在一些代码审查期间,我发现了这行代码:

ScTyp lScTyp = (ScTyp) (lWorkspace.getScTyp() == null ? ChartFactory.BLANK_STRING : lWorkspace.getScTyp());

我有点困惑因为这行代码导致在关于项目中失败的Hudson构建。 原因:inconvertible types

我知道类型转换在这里是完全错误的。如果getScTyp()null,则会尝试将StringChartFactory.BLANK_STRING)投放到ScTyp

为什么Eclipse没有在这行代码中显示错误或至少出现警告?

1 个答案:

答案 0 :(得分:2)

由于三元运算符可以求值为String或getScType返回,因此它将被计算为Object引用。将Object引用强制转换为任何其他类型都是完全可以的。

查看该行的另一种方法是

Object temp = lWorkspace.getScTyp() == null ? ChartFactory.BLANK_STRING : lWorkspace.getScTyp();
ScTyp lScTyp = (ScTyp)temp;

如果通过三元运算符的两条路径都返回ScTyp,那么就不需要进行强制转换。

我猜Eclipse最初在添加强制转换之前显示错误,有人通过添加强制转换来修复错误。然后隐藏了真正的错误。