带有最终上限的通配符

时间:2012-08-11 21:17:15

标签: java generics bounded-wildcard

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

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

  

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

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

1 个答案:

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

我自己,我无法像你那样得到编译器警告(也许你可以提供编译器的示例和细节?)。