Bootstrap

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

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星
在这里插入图片描述

;