在以下代码段中设置temp2.in
的正确方法是什么?为什么代码无法编译?
public class WildCards {
public static void main(String[] args) {
TheBox<Integer> temp1 = new TheBox<Integer>();
temp1.set(10);
TheBox<? extends Number> temp2 = temp1;
temp2.set(1);
}
public static class TheBox<T> {
T in;
public T get() {
return in;
}
public void set(T in) {
this.in = in;
}
}
}
最佳答案
因为只允许您使用temp2
做与TheBox
合法的事情,这些事情由Number
的任何可能的子类参数化。其中包括尚未编写的Number
子类。 Integer
只能分配给Number
的某些子类,而不是全部。
赋予temp2.set
的唯一合法论据是null
。这是因为null
可以分配给任何东西。
请阐明“什么是设置temp2.in的正确方法”的含义。用什么方式正确?该代码的预期行为是什么?