2013-07-19 59 views
3

在一些代码审查,我发现这行代码:不可转换的类型,但没有警告或错误?

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

我是一个有点困惑becouse这行代码导致失败哈德森建设的有关项目。 原因:inconvertible types

我知道typecast在这里是完全错误的。如果getScTyp()null,它会尝试将StringChartFactory.BLANK_STRING)投射到ScTyp

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

回答

2

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

另一种方式来查看该行会

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

如果通过三元运算符两个路径返回ScTyp,那么就没有必要强制转换。

我猜Eclipse最初确实在添加投射之前显示错误,并且有人通过添加投射来修正错误。那就隐藏了真正的错误。

相关问题