class A {}
class B extends A {}
class Holder<T> {
T object;
Holder(T object) {
this.object = object;
}
}
ジェネリックを使用して作成されたオブジェクトを保持するための Holder クラスがあります。main() では、ダイヤモンド演算子を使用して初期化すると、ホルダーのコンストラクターに渡された派生クラスでコンパイルされません (Java 7) (必要な A / 見つかった B):
public static void main(String[] args) {
Holder<A> holder = new Holder<>(new B());
}
ただし、基本型が右側の部分で指定されている場合は、コンパイルして機能します。
public static void main(String[] args) {
Holder<A> holder = new Holder<A>(new B());
}
なんで?ダイヤモンド演算子は、左側と同じ型パラメーターを使用して割り当ての右側を定義していませんか?