ダニエルは多かれ少なかれこれを正しく理解していますが、彼の答えを削除しました(5票以上)。
第2版JLS(1.2-1.4)からの関連する引用
- 2番目と3番目のオペランドが異なる参照型である場合、割り当て変換(§5.2)によって1つの型を他の型に変換できる必要があります(この後者の型をTと呼びます)。条件式の型はTです。どちらの型も他の型と割り当て互換性がない場合は、コンパイル時エラーになります。
タイプの1つは、他のタイプに変換可能である必要があります。これは、andには当てはまりませんが、and ArrayList
andofandにHashSet
は当てはまりCollection
ます。HashSet
ArrayList
Collection
第3版JLS(1.5+)
- それ以外の場合、2番目と3番目のオペランドはそれぞれタイプS1とS2です。T1をS1にボクシング変換を適用した結果のタイプとし、T2をS2にボクシング変換を適用した結果のタイプとします。条件式のタイプは、キャプチャ変換(§5.1.10)をlub(T1、T2)(§15.12.2.7)に適用した結果です。
これは明らかなことを行いますが、それを指定して実装するのはより困難です(式の1つがあったときに、意図せずに初期バージョンのjavacがクラッシュしましたvoid
)。IIRC、これはジェネリックの一部として行われた作業でした。