1. 程式人生 > >java8方法引用::操作符

java8方法引用::操作符

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