使用有界通配符推断类型的问题

时间:2015-04-26 11:36:24

标签: java generics bounded-wildcard

在下面的代码段中设置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;
        }
    }    
}

1 个答案:

答案 0 :(得分:1)

因为您只允许使用temp2TheBox参与<{>>任何可能的Number子类合法的事情。这包括尚未编写的Number的子类。 Integer只能分配给 Number的某些子类,但不是全部。temp2.set

授予null的唯一合法理由是null。那是因为startActivityForResult()可以分配给任何东西。

请通过“设置temp2.​​in的正确方法”来澄清你的意思。适当的方式?这段代码的期望行为是什么?