Java 8引入了方法引用,文档描述了四种类型。
我的问题是两种实例类型之间有什么区别?
- 对特定对象的实例方法的引用。
- 对特定类型的任意对象的实例方法的引用。
这两者都是引用,但有何显着不同?解析它们所使用的类型推断是否不同?在他们的示例中,其中一个是闭包,另一个是lambda,这重要吗?与方法参数的数量是否有关?
Java 8引入了方法引用,文档描述了四种类型。
我的问题是两种实例类型之间有什么区别?
- 对特定对象的实例方法的引用。
- 对特定类型的任意对象的实例方法的引用。
这两者都是引用,但有何显着不同?解析它们所使用的类型推断是否不同?在他们的示例中,其中一个是闭包,另一个是lambda,这重要吗?与方法参数的数量是否有关?
myString::charAt
接受一个 int
参数并返回一个 char
值,可以用于任何按照该方式工作的 lambda 表达式。它本质上的翻译是 index -> myString.charAt(index)
。
String::length
接受一个 String
参数并返回一个 int
值。它本质上的翻译是 string -> string.length()
。
String::charAt
本质上的翻译是 (string, index) -> string.charAt(index)
。
String::charAt
相当于 (s, i) -> s.charAt(i)
。第一个参数变成了接收者,并且后续参数左移了一个位置。相当微妙。 - Stuart Marksthis::someFunction;
,这将返回当前对象的someFunction
引用。String::toUpperCase
,这将返回一般情况下String
的toUpperCase
方法。