9

Class<? extends Integer>可以正常编译,但是Integer是最终类型,因此将其用作上限是没有意义的(什么都不会extend)。

如果您尝试使用最终类型作为类型参数的上限,您将收到编译器警告:

类型参数 T 不应受最终类型 Integer 的限制。最终类型无法进一步扩展

为什么使用最终类型作为通配符的上限完全没问题,但会为类型参数抛出警告?为什么 Java 甚至允许通配符以最终的大写类型为界?

4

1 回答 1

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);

我自己,我无法像您一样收到编译器警告(也许您可以提供有关编译器的示例和详细信息?)。

于 2012-08-11T21:47:18.137 回答