これはjdk1.7.0_04
です。Collections.emptyList()やJava汎用メソッドの奇妙な型推論動作ですか?
new
よりも
Collections.emptyList()
を使用しようとした
:私は私ということを理解することができた
error: incompatible types
List<String> list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
^
required: List<String>
found: List<CAP#1>
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ? extends Object
1 error
:
List<String> list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
をしかし、次のエラーを取得変更する必要があります:
List<String> list = (anArray != null) ? Arrays.asList(anArray) : Collections.<String>emptyList();
しかし、作業の一部として
List<String> alwaysEmpty = Collections.emptyList();
は罰金コンパイル、しかし:
List<String> alwaysEmpty = (List<String>) Collections.emptyList();
は、以下のコンパイルエラーを与える:
error: inconvertible types
List<String> alwaysEmpty = (List<String>) Collections.emptyList();
^
required: List<String>
found: List<Object>
は一体何この上で私は奇妙な(私には、とにかく)状況に遭遇しました??
ここで、何らかの奇妙な理由から、条件演算子を使用すると、型推論システムがの型パラメータが明示的に指定される必要があることを認識できなくなることが理解できます。しかし、なぜ(間違いなく冗長な)キャストの混乱物を挿入するのですか?