多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java 8 中的方法引用 > 原文: [https://beginnersbook.com/2017/10/method-references-in-java-8/](https://beginnersbook.com/2017/10/method-references-in-java-8/) 在上一个教程中,我们在 Java 8 中学习了 [lambda 表达式](https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/)。这里我们将讨论 java 8 的另一个新特性,**方法引用**。方法引用是用于调用方法的 lambda 表达式的简写表示法。例如: 如果你的 lambda 表达式是这样的: ```java str -> System.out.println(str) ``` 然后你可以用这样的方法引用替换它: ```java System.out::println ``` `::`运算符用于方法引用,以将类或对象与方法名称分开(我们将在示例的帮助下学习)。 ## 四种方法引用 1. 对象的实例方法的方法引用 - `object::instanceMethod` 2. 类的静态方法的方法引用 - `class::staticMethod` 3. 特定类的任意对象的实例方法的方法引用 - `Class::instanceMethod` 4. 构造函数的方法引用 - `Class::new` ## 1.方法引用:对象的实例方法 ```java @FunctionalInterface interface MyInterface{ void display(); } public class Example { public void myMethod(){ System.out.println("Instance Method"); } public static void main(String[] args) { Example obj = new Example(); // Method reference using the object of the class MyInterface ref = obj::myMethod; // Calling the method of functional interface ref.display(); } } ``` 输出: ```java Instance Method ``` ## 2.方法引用:类的静态方法 ```java import java.util.function.BiFunction; class Multiplication{ public static int multiply(int a, int b){ return a*b; } } public class Example { public static void main(String[] args) { BiFunction<Integer, Integer, Integer> product = Multiplication::multiply; int pr = product.apply(11, 5); System.out.println("Product of given number is: "+pr); } } ``` 输出: ```java Product of given number is: 55 ``` ## 3.方法引用:特定类型的任意对象的实例方法 ```java import java.util.Arrays; public class Example { public static void main(String[] args) { String[] stringArray = { "Steve", "Rick", "Aditya", "Negan", "Lucy", "Sansa", "Jon"}; /* Method reference to an instance method of an arbitrary * object of a particular type */ Arrays.sort(stringArray, String::compareToIgnoreCase); for(String str: stringArray){ System.out.println(str); } } } ``` 输出: ```java Aditya Jon Lucy Negan Rick Sansa Steve ``` ## 4.构造函数的方法引用 ```java @FunctionalInterface interface MyInterface{ Hello display(String say); } class Hello{ public Hello(String say){ System.out.print(say); } } public class Example { public static void main(String[] args) { //Method reference to a constructor MyInterface ref = Hello::new; ref.display("Hello World!"); } } ``` 输出: ```java Hello World! ```