java8方法引用::操作符
阿新 • • 發佈:2018-12-19
java8中方法引用::
有四種類型
ClassName::New
ClassName::static_method
ClassName::instance_method
instance::instance_method
第一種是對建構函式的引用,相當於建立物件 第二種與第四種,如果有引數會把引數當方法的實參 第三種會把第一個引數當做類物件,來呼叫instance_method,其他引數當做方法的引數。
看下面例項程式碼,有方法上都有註釋解釋
package com.xhx.java;
import org.junit.Test;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Supplier;
public class App {
/**
* 1.構造器引用
* ClassName::New => new ClassName()
* 如果呼叫時有引數,相當於呼叫帶參的建構函式
*/
@Test
public void test1(){
App.toString(User::new);
}
public static void toString(Supplier supplier) {
System.out.println(supplier.get().toString());
}
/**
* 2.靜態方法引用
* ClassName::static_method =》 CLassName.static_method()
* 如果呼叫時有引數,直接放到靜態方法的形參中
*/
@Test
public void test2(){
Arrays.asList("a","b").stream().forEach(User::testStatic);
}
/**
* 特定類對方法引用
* ClassName::instance_method => obj.instance_method(xxx)
* 呼叫時引數:第一個引數是實體物件 上面的obj
* 如果有其他引數,會傳到方法中
*/
@Test
public void test3(){
User user = new User();
user.setId("123");
user.setAge(13);
user.setName("beaufulGirl");
Optional.of(user).ifPresent(User::printString);
}
/**
* 特定物件對方法引用
* instance::instance_method =》instance.instance_method(xxxx);
* 如果有引數,引數就是方法的引數
*/
@Test
public void test4(){
User user = new User();
user.setId("123");
user.setAge(13);
user.setName("beaufulGirl");
toString(user::printString);
}
public interface MyInterface{
void doSomething();
}
public void toString(MyInterface face){
face.doSomething();
}
}