首页 > 解决方案 > 使用菱形分配具有有界通配符的泛型类型

问题描述

以下代码:

Set<? extends Integer> set = new HashSet<>();

编译良好。但是,使用菱形符号的本质只是为了不再重写 LHS 类型参数。这意味着上面的语句应该与以下语句等效:

Set<? extends Integer> set = new HashSet<? extends Integer>();

但事实证明,事实并非如此。我想这是合理的,因为编译器不知道对象的类型参数,因为它是通配符('?')。当不使用有界类型参数时,一切正常,所以我认为这同样适用于任何情况。但是为什么仍然允许语法呢?最后,第一个语句的类型参数是什么?

谢谢

标签: javagenericswildcardbounded-wildcard

解决方案


推荐阅读