Class<? extends Integer>
编译正常,但Integer
是最终类型,因此将它用作上限是没有意义的(没有任何东西extend
它。)
如果您尝试使用final类型作为类型参数的上限,您将收到编译器警告:
类型参数T不应受最终类型Integer的限制。 最终类型无法进一步扩展
为什么使用final类型作为通配符的上限是完全正常的,但是为类型参数抛出警告?为什么Java甚至允许通配符被最终的上层类型限制?
答案 0 :(得分:5)
Class<Integer>
不像Class<? extends Integer>
那样允许分配。
例如,这会编译:
Class<? extends Number> numberClass = Integer.class;
Class<? extends Integer> integerClass = numberClass.asSubclass(Integer.class);
这不是:
Class<? extends Number> numberClass = Integer.class;
Class<Integer> integerClass = numberClass.asSubclass(Integer.class);
我自己,我无法像你那样得到编译器警告(也许你可以提供编译器的示例和细节?)。