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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值