Java8方法引用可以一直用作lambda吗?

Java8方法引用可以一直用作lambda吗?,java,lambda,java-8,Java,Lambda,Java 8,我是否可以使用Java 8方法引用,如myInstance::myMethod,与lambda互换,如()->myInstance.myMethod(),或者在如何创建/评估/执行它们方面是否有任何警告,有时这会让位于不同的运行时行为和特殊性?我强烈建议您不要将方法引用与lambda混为一谈。lambda是它们自己的讨论主题,并不完全依赖于方法引用 碰巧,通过方法引用,我们可以删除很多样板文件,因为方法引用提供了语法上的糖分 例如,假设我想要一个函数,它接受两个不同类型的参数(比如一个字符串和一

我是否可以使用Java 8方法引用,如
myInstance::myMethod
,与lambda互换,如
()->myInstance.myMethod()
,或者在如何创建/评估/执行它们方面是否有任何警告,有时这会让位于不同的运行时行为和特殊性?

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

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

例如,假设我想要一个函数,它接受两个不同类型的参数(比如一个字符串和一个整数),我想要它输出一个字符串

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

方法引用只是简化了使用lambdas的样板。如果一个方法符合lambda的签名,你可以用它来代替lambda表达式。

注意:它是
myInstance::myMethod
,而不是
myInstance::myMethod()
。哦,是的,哈哈,这就是你在没有IDE的情况下得到的结果;简而言之,您总是可以编写一个等价的lambda表达式,但确切的等价表达式并不总是那么简单。@这不是一个区别,因为两者在定义lambda/方法引用时都计算
myInstance
引用值。如果您要寻找差异,lambda需要
myInstance
作为有效的最终版本,而方法引用则不是。我问这个问题正是因为我从lambda转换为方法引用得到了不同的行为。所以我不认为这像“如果签名合适,他们的行为会一样”那么简单。嗯……lambdas不是这样工作的。这样如何:写一个新问题,将这两段代码放在一起演示,并解释将lambda转换为方法引用会得到什么不同的响应。我想这样做,但我担心代码可能太大,因为它是一个安卓
LiveData
,在
片段中,我把它转换成了一个
事件
,它是由一个
视图模型
触发的……当安卓回到同一个
片段时,会发生不同的行为。所以我很难简化它,因为一个问题,你必须简化,因为这里没有人对你撒谎,但事实上它不是回答你的问题。是的,我至少会尝试上传一些东西到github…无论如何,谢谢
BiFunction<String, Integer, String> func = String::substring;
@FunctionalInterface
interface TriFunction<T, U, V, R> {
    R apply(T t, U u, V v);
}