这个问题在这里已经有答案了:
带菱形运算符的通配符(3个答案)
使用通配符创建新的泛型对象(2个答案)
三小时前关门了。
以下代码: Set<? extends Integer> set = new HashSet<>();
编译得很好。然而,使用菱形表示法的本质只是为了不再重写lhs类型参数。这意味着上述声明应等同于以下内容: Set<? extends Integer> set = new HashSet<? extends Integer>();
但事实证明,事实并非如此。我猜这是合理的,因为编译器不知道对象的类型参数,因为它是通配符(“?”)。当不使用有界类型参数时,一切都正常,所以我认为这同样适用于任何情况。但是为什么允许语法呢?最后,第一条语句的类型参数是什么?
谢谢
暂无答案!
目前还没有任何答案,快来回答吧!