泛型Set问题

package p1;

public class B {
	public static void main(String[] args) {
		Holder<? extends Fruit> holder = new Holder<Apple>();
		holder.set(new Fruit());    // 报错
	}
}

class Holder<T> {
	private T value;
	
	public void set(T val) {
		value = val;
	}
	
	public T get() {
		return value;
	}
}

class Fruit {
	
}

class Apple extends Fruit {
	
}

set()方法不能作用于Apple或Fruit,因为set()参数也是? extends Fruit,这意味着它可以是任何Fruit,而编译器无法验证Fruit及其子类的安全性。
例如:
T可能是Apple,如果set(new Fruit()),那么value作为Apple类型是无法引用其父类的

你可能感兴趣的:(Java)