次のクラスでは、2つのメソッドの戻り型は、三項演算子という考え方と矛盾しています。
return condition?a:b;
と同等です
if(condition) {
return a;
} else{
return b;
}
1つ目はDoubleを返し、2つ目はLongを返します。
public class IfTest {
public static Long longValue = 1l;
public static Double doubleValue = null;
public static void main(String[] args) {
System.out.println(getWithIf().getClass());// outpus Long
System.out.println(getWithQuestionMark().getClass());// outputs Double
}
public static Object getWithQuestionMark() {
return doubleValue == null ? longValue : doubleValue;
}
public static Object getWithIf() {
if (doubleValue == null) {
return longValue;
} else {
return doubleValue;
}
}
}
これは、コンパイラのリターン型のナローキャストに関係していると想像できますが、getWithQuestionMark()
その言語は大丈夫ですか?それは確かに私が期待したものではありません。
どんな洞察も大歓迎です!
編集:以下に非常に良い答えがあります。さらに、@ sakthisundarによって参照される次の質問は、三項演算子で発生する型昇格の別の副作用を調査します。Javaのトリッキーな三項演算子-オートボクシング