[英]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.