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

时间:2014-03-19 19:34:05

标签: java java-8 method-reference

因此,Java 8引入了方法引用和docs describe the four types

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

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

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

2 个答案:

答案 0 :(得分:15)

1)myString::charAt将使用int并返回char,并且可能用于任何以这种方式工作的lambda。它基本上翻译为index -> myString.charAt(index)

2)String::lengthString并返回int。它基本上翻译为string -> string.length()

我甚至不确定String::charAt是否会转化为(string, index) -> string.charAt(index)。不过,我有点期待它。

答案 1 :(得分:3)

这意味着你有以下内容:

1)可以是例如this::someFunction;,这将返回当前对象的someFunction引用。

2)可以是String::toUpperCase,这通常会返回toUpperCase String方法。

我不确定行为是否存在实际差异,我认为就像你也可以在实例变量上调用静态方法一样。