对不起,问题标题太笼统了,但我不确定如何正确地称呼我的问题。
查看 Collections.singleton
的默认结果类型调用:
Set<Number> numberSingleton =
Collections.singleton((Number) null);
Set<Collection> rawCollectionSingleton =
Collections.singleton((Collection) null);
Set<Collection<String>> stringCollectionSingleton =
Collections.singleton((Collection<String>) null);
Set<? extends Collection<?>> anyCollectionSingleton =
Collections.singleton((Collection<?>) null);
我无法解释的是最后一行。为什么 ? extends Collection<?>
使用而不是简单的 Collection<?>
?
这是对此的正确修复吗?
Set<Collection<?>> anyCollectionSingleton =
Collections.<Collection<?>>singleton((Collection<?>) null);
为什么我开始这一切:
我遇到了没有编译行的问题:
java.util.Optional.ofNullable((Collection<?>) a).orElse((Collection<?>) b);
这似乎解决了问题,但代价是多少?
java.util.Optional.<Collection<?>>ofNullable((Collection<?>) a).orElse((Collection<?>) b);
最佳答案
不,这是一个完全不同的概念。
与什么一起使用
Set<? extends Collection<?>> anyCollectionSingleton =
Collections.singleton((Collection<?>) null);
是你有一个泛型类,它扩展了泛型类的集合。
所以,这是关于继承的。
关于带有通配符和静态包装器的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34807682/