带有最终上限的通配符

Jef*_*rey 8 java generics bounded-wildcard

Class<? extends Integer>将编译正常,但是Integer是最终类型,因此将它用作上限是没有意义的(没有任何东西会永远extend).

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

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

为什么使用final类型作为通配符的上限是完全正常的,但是为类型参数抛出警告?为什么Java甚至允许通配符被最终的上层类型限制?

Mar*_*ers 5

Class<Integer>并不像作业那样宽容Class<? extends Integer>.

例如,这编译:

Class<? extends Number> numberClass = Integer.class;
Class<? extends Integer> integerClass = numberClass.asSubclass(Integer.class);
Run Code Online (Sandbox Code Playgroud)

这不是:

Class<? extends Number> numberClass = Integer.class;
Class<Integer> integerClass = numberClass.asSubclass(Integer.class);
Run Code Online (Sandbox Code Playgroud)

我自己,我不能像你那样得到编译器警告(也许你可以提供一个关于你的编译器的例子和细节?).