lambda 表达式中的参数类型不兼容

tra*_*veh 2 java lambda dictionary functional-programming weak-references

考虑到这段代码:

Map<C1, C2> map;
C1 key;
C2 value;
Run Code Online (Sandbox Code Playgroud)

为什么这样做:

map.computeIfAbsent(key, k -> value)
Run Code Online (Sandbox Code Playgroud)

而这不是?

map.computeIfAbsent(key, () -> value)
Run Code Online (Sandbox Code Playgroud)

dre*_*ash 8

因为方法computeIfAbsent具有以下签名:

default V computeIfAbsent(K key,
                          Function<? super K,? extends V> mappingFunction)
Run Code Online (Sandbox Code Playgroud)

所以它需要 a Function,它是一个函数接口,需要一个参数并返回一个值。而() -> value, 不接收任何参数并产生一个值(例如供应商)。