# 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 表达式。这里我们将讨论 java 8 的另一个新特性，**方法参考**。方法引用是用于调用方法的 lambda 表达式的简写表示法。例如：
如果你的 lambda 表达式是这样的：](https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/)

```java
str -> System.out.println(str)
```

然后你可以用这样的方法引用替换它：

```java
System.out::println
```

::运算符用于方法引用，以将类或对象与方法名称分开（我们将在示例的帮助下学习）。

## 四种方法参考

1.对象的实例方法的方法引用 - object :: instanceMethod
2.对类的静态方法的方法引用 - 类:: 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);  
   }  
}
```

Output:

```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);
	}
   }  
}
```

Output:

```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!");  
    }  
}
```

Output:

```java
Hello World!
```