假设我有一个如下所示的方法:
public <T extends Supplier<Collection<String>> & Serializable> void doSomething(T supplier){
new ArrayList<String>().stream().collect(Collectors.toCollection(supplier));
}
为什么会这样呢?
doSomething(() -> new ArrayList<>());
导致了一个问题,但是...
doSomething((Supplier<Collection<String>> & Serializable)() -> new ArrayList<>());
这样可以吗?在这两种情况下,Lambda本身是完全一样的,在第二种情况下它可以工作。这意味着JVM能够创建可序列化的Lambda,但编译器不能识别这一点吗?
编辑:将第一个调用更改为我想要的。
() -> ArrayList::new
尝试通过方法引用实现一个Collection
接口。你是不是想要使用ArrayList::new
或者() -> new ArrayList<>()
代替它? - HolgerArrayList::new
更改为() -> new ArrayList<>()
以更好地说明我的问题,但忘记将方法引用更改为调用。谢谢! - Domas Poliakas