Java 8中的实例方法引用类型之间有什么区别?

Tob*_*oby 20 java java-8 method-reference

所以Java 8引入了方法引用,文档描述了这四种类型.

我的问题是两种实例类型之间的区别是什么?

  1. 引用特定对象的实例方法.
  2. 引用特定类型的任意对象的实例方法.

两者都参考参考但有什么显着不同?用于解决它们的类型推断是不同的吗?重要的是(在他们的例子中)一个是闭包而另一个是lambda?它与方法的参数数量有关吗?

Lou*_*man 15

1)myString::charAt将采取int并返回a char,并可能用于任何以这种方式工作的lambda.它本质上是翻译成的index -> myString.charAt(index).

2)String::length将采取String并返回一个int.它本质上是翻译成的string -> string.length().

我甚至不确定是否String::charAt会翻译成(string, index) -> string.charAt(index).不过,我有点期待它.

  • 至于你的最后一点,是的,`String :: charAt`相当于`(s,i) - > s.charAt(i)`.第一个arg成为接收器,随后的args向左移动一个位置.相当微妙. (4认同)