Java 8方法引用可以一直用作Lambda吗?

时间:2018-10-31 15:15:41

标签: java lambda java-8

我可以将Java 8方法引用(例如myInstance::myMethod)与lambda(例如() -> myInstance.myMethod())互换使用,还是对它们的创建/评估/执行方式有任何警告,有时这可以不同的运行时行为和特殊性的方法?

1 个答案:

答案 0 :(得分:0)

我强烈建议您不要将方法引用与lambda混合使用。 Lambda是他们自己的讨论主题,并不完全依赖于方法引用。

碰巧的是,通过方法引用,我们可以删除很多样板,因为方法引用提供了语法糖。

例如,假设我想要一个函数,该函数接受两个不同类型的参数(例如String和Integer),并且希望它输出一个String。

BiFunction<String, Integer, String> func = (s, i) -> s.substring(i);

我可以改用方法引用重写它,因为存在适合该签名的方法。

BiFunction<String, Integer, String> func = String::substring;

如果我想适合其他签名,则必须创建自己的@FunctionalInterface来实现。

@FunctionalInterface
interface TriFunction<T, U, V, R> {
    R apply(T t, U u, V v);
}

方法引用只是减少了使用lambda的样板。如果某个方法适合您的lambda签名,则可以使用它代替lambda表达式。