我得到类型不匹配的错误,直到我重构代码,以这样的:泛型是不变的,但这种编译没有错误
public final Stream<Map.Entry<E, Integer>> orderedStreamOfEntries() {
return this.m_map.entrySet()
.stream()
.sorted(Comparator.comparingInt(Entry::getValue))
.map(AbstractMap.SimpleImmutableEntry::new);
}
- 返回类型
Stream<Entry<E, Integer>>
- 在该类型的流这个程序的结束是
Stream<SimpleImmutableEntry<E, Integer>>
形式类型参数E
有这样的定义:
<E extends Enum<E> & MyCustomInterface>
我不明白为什么这似乎是可以接受的编译器。由于Java泛型是不变的,即使java.util.AbstractMap.SimpleImmutableEntry
实现了,我也会说Stream<SimpleImmutableEntry<>>
不是返回类型的子类型Stream<Entry<>>
。
从类定义中定义的'E'是什么? – ArtB
@ArtB:我已将定义编辑到问题 – scottb
如果有疑问在调试时,我建议将流上的每个操作作为对特定变量的赋值进行拆分。使用具有重构支持的IDE使得这个微不足道。这会让你看到类型的演变。 – ArtB