我得到類型不匹配的錯誤,直到我重構代碼,以這樣的:泛型是不變的,但這種編譯沒有錯誤
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