代入のジェネリックタイプパラメータは判別できますが、3項演算子(?
)のジェネリックタイプパラメータは判別できないのはなぜですか?三項演算子( `?`)を使用するとき、Javaはジェネリック型パラメータを推論できませんか?
は、私が「直接」譲渡の場合にはジェネリック型 パラメータを推定することができることが、三項演算子 (?
)の場合に失敗し、コンパイラに関する質問があります。私の例では、GuavaのOptional
クラスを使用して、私の指摘をしていますが、 根本的な問題はOptional
に限定されないと思います。
Optional
は、一般的な機能absent()
あります
public static <T> Optional<T> absent();
を、私はOptional<Double>
にOptional<T>
を割り当てることができます。
// no compiler error
final Optional<Double> o1 = Optional.absent();
はどのようにコンパイラがT
が、この場合にDouble
なければならないこと、わかっていません。三項演算子(?
)を使用しているとき、私は特に
Integer
私たちに
// Type mismatch: cannot convert from Optional<capture#1-of ? extends Object> to Optional<Integer>
final Optional<Integer> o2 = true
? Optional.of(42)
: Optional.<Integer>absent();
コンパイラに指示する必要があり ので、そうでない場合、私は次のようなエラーに
型の不一致を取得:変換できませんfrom
Optional<capture#1-of ? extends Object>
toOptional<Integer>
なぜ「直接」割り当てと三元 オペレータ?それとも、私が行方不明の何か他のものがありますか?
'of'メソッドの戻り値は何ですか? – sanbhat
'absent()'と同じです: 'public static of(T参照);' –
これをコンパイルするjavacのバージョンは? – Vincent