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

2022-09-01 21:13:15

因此,Java 8 引入了方法参考,文档描述了这四种类型

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

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

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


答案 1
  1. myString::charAt将采用 a 并返回 a ,并且可能用于任何以这种方式工作的 lambda。从本质上讲,它转换为 .intcharindex -> myString.charAt(index)

  2. String::length将采取 a 并返回一个 .从本质上讲,它转换为 .Stringintstring -> string.length()

  3. String::charAt将转换为 .(string, index) -> string.charAt(index)


答案 2

有了这个,他们意味着你有以下几点:

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

2)可以例如,这将返回一般的方法。String::toUpperCasetoUpperCaseString

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


推荐