gpt4 book ai didi

java - 轻松声明交叉类型的 java lambda

转载 作者:行者123 更新时间:2023-12-02 03:50:18 26 4
gpt4 key购买 nike

假设我有如下方法:

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,但是编译器是否无法识别出这是可能的?

编辑:将第一次调用更改为我想要的。

最佳答案

来自JLS 15.16. Cast Expressions :

Casts can be used to explicitly "tag" a lambda expression or a method reference expression with a particular target type. To provide an appropriate degree of flexibility, the target type may be a list of types denoting an intersection type, provided the intersection induces a functional interface (§9.8).

并且没有评论为什么不自动推断它。我的猜测:这是可能的,但尚未实现。尤金在评论中所说的也很有趣。这是否意味着 Java 9 中将会出现类似的东西?

关于java - 轻松声明交叉类型的 java lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com