【发布时间】:2019-12-15 08:22:21
【问题描述】:
我正在查看现有代码并试图了解 lambda 表达式和函数式接口的工作原理。
代码如下:
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);
为什么comparing 方法依赖于compare 方法?
【问题讨论】:
-
重写你的标题以总结你的具体技术问题。您的问题与其他关于 lambda 和函数式接口的问题有何不同?
-
我对您的代码示例感到困惑。您是否真的在尝试重新定义内置类型Comparator?为什么?
-
如果这就是 OP 的意图,是的,它会更清楚。
-
我在看 lambda 的在线课程,导师使用 Comparator 作为接口名称,所以我复制了代码的 sn-p,抱歉造成混淆