简单地说,方法引用(Method References)就是一个Lambda表达式。在Java 8中,无涯教程会使用Lambda表达式创建匿名方法,但是有时候,Lambda表达式可能仅仅调用一个已存在的方法,而不做任何其它事,对于这种情况,通过一个方法名字来引用这个已存在的方法会更加清晰,Java 8的方法引用允许这样做。方法引用是一个更加紧凑,易读的Lambda表达式,注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号"::"。
方法引用可用于以下类型的方法-
- Static methods 静态方法
- Instance methods 实例方法
- Constructors using new operator (TreeSet::new) 构造方法
方法引用示例
使用您选择的任何编辑器创建以下Java程序,例如,C:\> JAVA.
Java8Tester.java
import java.util.List;
import java.util.ArrayList;
public class Java8Tester {
public static void main(String args[]) {
List names = new ArrayList();
names</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="str">"Mahesh"</span><span class="pun">);</span><span class="pln">
names</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="str">"Suresh"</span><span class="pun">);</span><span class="pln">
names</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="str">"Ramesh"</span><span class="pun">);</span><span class="pln">
names</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="str">"Naresh"</span><span class="pun">);</span><span class="pln">
names</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="str">"Kalpesh"</span><span class="pun">);</span><span class="pln">
names</span><span class="pun">.</span><span class="pln">forEach</span><span class="pun">(</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">::</span><span class="pln">println</span><span class="pun">);</span><span class="pln">
}
}
在这里,无涯教程传递了System.out::println方法作为静态方法引用。
使用javac编译器编译类,如下所示-
C:\JAVA>javac Java8Tester.java
现在运行Java8Tester,如下所示-
C:\JAVA>java Java8Tester
它应该生成以下输出-
Mahesh Suresh Ramesh Naresh Kalpesh