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