class A {}
class B extends A {}
class Holder<T> {
T object;
Holder(T object) {
this.object = object;
}
}
有一个 Holder 类来保存一些使用泛型创建的对象。在 main() 中,当使用菱形运算符初始化时,它不会编译(Java 7),派生类传递给 Holder 的构造函数(需要 A / found 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());
}
为什么?菱形运算符不使用与左侧相同的类型参数定义赋值的右侧部分吗?