带有通配符和静态包装器的Java泛型

时间:2016-01-15 09:12:27

标签: java generics

打扰一下如此通用的问题标题,但不确定如何正确地调用我的问题。

查看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);

1 个答案:

答案 0 :(得分:0)

不,这是一个完全不同的概念。

一起使用的意思
Set<? extends Collection<?>> anyCollectionSingleton = 
Collections.singleton((Collection<?>) null);

是你有一个扩展泛型类集合的泛型类。

所以,这是关于继承。