在以下代码段中:
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>
的条目。
答案 0 :(得分:5)
您的输入参数具有足够的类型信息,编译器可以推断所有中间泛型类型。
它可以说“进来的东西”和“出来的东西”......以及“介于两者之间的步骤”匹配。
示例:第一个调用是 entrySet();所以周围的类可能是一个定义了K,V的Map。所以编译器知道它正在处理一些EntrySet<K,V>
...可能与neededIDs
上的泛型类型相匹配。
等等......如果你对自己“推断”这些类型感兴趣;我建议你首先分解那些流畅链接的方法调用。逐一;计算他们返回的内容,以及您可以了解的每项操作的结果类型。