[英]Why is it acceptable to omit the generic type parameter here?
在以下代碼段中:
public class IDMapBase<T> extends HashMap<DeviceID, T> {
public Map<DeviceID, T> filterMap(Set<DeviceID> neededIDs) {
return entrySet().stream()
.filter(e -> neededIDs.contains(e.getKey()))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
}
}
為什么只說Entry::getXX
而不是Entry<DeviceID, T>>::getXX
? 我認為(Map.)Entry
將默認為Entry<Object, Object>
,這不能用作Map<DeviceID, T>
的條目。
您的輸入參數具有足夠的類型信息,供編譯器推斷所有中間通用類型。
它可以說明“什么進來”和“什么進來” ...以及“中間的步驟”匹配。
示例:第一個調用是entrySet() ; 因此周圍的類可能是具有定義的K,V的Map。因此,編譯器知道它正在處理某些EntrySet<K,V>
...可能與在neededIDs
找到的通用類型匹配。
依此類推...如果您有興趣自己“推斷”類型,則可以; 我建議您首先分解那些流利的鏈接方法調用。 逐一; 弄清楚它們返回什么,以及您可以了解每個操作的結果類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.