在以下代码段中设置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的正确方法”的含义。用什么方式正确?该代码的预期行为是什么?

09-26 09:02