3

コードのレビュー中に、次のコード行を見つけました。

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

このコード行が関連プロジェクトでの Hudson ビルドの失敗につながるため、私は少し混乱しました。理由:inconvertible types

ここでは、型キャストが完全に間違っていることを知っています。の場合、 ( ) をにキャストしようとgetScTyp()します。nullStringChartFactory.BLANK_STRINGScTyp

このコード行で Eclipse がエラーまたは少なくとも警告を表示しないのはなぜですか?

4

1 に答える 1

2

三項演算子は文字列または getScType が返すもののいずれかに評価できるため、オブジェクト参照に評価されます。Object 参照を他の型にキャストしてもまったく問題ありません。

その行を表示する別の方法は、

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

三項演算子を介した両方のパスが ScTyp を返した場合、キャストは必要ありませんでした。

キャストが追加される前にEclipseがもともとエラーを表示したと推測しており、誰かがキャストを追加してエラーを修正しました。それは本当のエラーを隠しました。

于 2013-07-19T12:40:37.007 に答える