请查看以下代码。为什么即使 Integer 继承自 Number 也会抛出此错误,为什么在 '?使用扩展数字"。
public class testGeneric
{
public static void main(String[] args)
{
Class<Integer> classint = int.class;
Class<Number> classnum1 = int.class;// Error Type mismatch: cannot convert from
// Class<Integer> to Class<Number>
Class<? extends Number> classnum2 = int.class;
}
}
型类型中没有协方差(如果这是我正在寻找的词(。
它们需要完全匹配。
Class<Number>
只能由Number.class
分配。
如果要允许子类(或超类(,则必须使用 extends
或 super
。
Class<? extends Number>
可以服用Integer.class
(其中包括Long.class
或Number.class
(。
Class<? super Number>
可以采取Number.class
或Object.class
。
这与能够在子类实例上工作的泛型方法不同。
例如,您可以将Integer
添加到List<Number>
中,但这不会使List<Number>
可分配给List<Integer>
(反之亦然(。
对象实例可以在需要超类的地方使用,但泛型类型不能。
根据我的理解
整数和整数正在发生Autoboxing and Unboxing
,但数字和整数不可能。
有关自动装箱的信息,请参阅 https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html