3

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

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

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

我知道这里的类型转换是完全错误的。如果getScTyp()null,它会尝试将String( ChartFactory.BLANK_STRING) 转换为ScTyp.

为什么 Eclipse 在这行代码中不显示错误或至少是警告?

4

1 回答 1

2

由于三元运算符可以评估为 String 或 getScType 返回的内容,因此它被评估为 Object 引用。将 Object 引用转换为任何其他类型是完全可以的。

查看该行的另一种方法是

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

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

我猜 Eclipse 最初确实在添加演员表之前显示了一个错误,并且有人通过添加演员表修复了错误。然后隐藏了真正的错误。

于 2013-07-19T12:40:37.007 回答