gpt4 book ai didi

java - 为什么这个返回 lambda 的方法取决于接口(interface)方法的返回类型?

转载 作者:行者123 更新时间:2023-12-02 07:35:32 26 4
gpt4 key购买 nike

我正在查看现有代码并尝试了解 lambda 表达式和函数式接口(interface)的工作原理。

这是代码:

public interface MyComparator<T> {
public int compare(T t1, T t2);

public static MyComparator<Person> comparing(Function<Person, Comparable> fun) {
return (p1, p2) -> fun.apply(p1).compareTo(fun.apply(p2));
}
}

上面的代码可以正确编译,没有任何问题,但是如果我将 compare 方法的返回类型从 int 更改为 String ,我收到错误:

Type mismatch: cannot convert from int to String

public int compare(T t1, T t2);

为什么compareing方法依赖于compare方法?

最佳答案

您的函数类型是Function<Person, Comparable> ,这意味着 fun.apply(p1)返回 Comparable 。这是Java标准库中定义的一个接口(interface),它声明了一个名为 compareTo 的方法。返回 int ,因此你的 lambda 返回 int .

这意味着如果您将功能接口(interface)定义为具有返回 int 的单个抽象方法。 ,那么你的 lambda 符合函数式接口(interface),因为它确实返回 int 。但是如果您将该抽象方法定义为返回 String ,那么 lambda 不符合函数式接口(interface),因为它不返回 String .

在后一种情况下,这是您的 comparing 的类型错误返回该 lambda 的方法,因为 comparing 的签名说它应该返回一个实现您的函数式接口(interface)的实例,但由于 lambda 的返回类型错误,所以 lambda 不符合该函数式接口(interface)。

关于java - 为什么这个返回 lambda 的方法取决于接口(interface)方法的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59340172/

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