Java方法引入

Java方法引入例子与实战

1、静态方法引入

定义一个函数式接口

/**
 * @author FPH
 */
@FunctionalInterface
public interface MessageInterface {
    String get(String id);
}

main方法中定义静态方法,并且返回类型参数数量与类型都与函数式接口一致

使用lambda写法:

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        MessageInterface messageInterface=(a)->staticGet(a);
        System.out.println(messageInterface.get("123"));
    }
    public static void staticGet(String id){
        System.out.println(id);
    }
}

输出结果为:
在这里插入图片描述

亦能通过方法引入的形式使其更精简化

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        MessageInterface messageInterface= Main::staticGet;
        System.out.println(messageInterface.get("123"));
    }
    public static void staticGet(String id){
        System.out.println(id);
    }
}

2、实例方法引入

函数式接口不变,和静态方法引入不同的地方是,需要实例化该类,才能引入此方法

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        MessageInterface messageInterface= main::staticGet;
        System.out.println(messageInterface.get("123"));
    }
    public  String staticGet(String id){
        return id;
    }
}

3、构造函数方法引入

首先新建一个Student类

public class Student {
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

这里比较重要的是有参构造和无参构造

函数式接口:

/**
 * @author FPH
 */
@FunctionalInterface
public interface MessageInterface {
    Student get(String name,Integer age);
}

这里的参数取决于Student类中的构造函数,如果没有一个String类型与Integer类型的构造参数,则会报错

Main:

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        MessageInterface messageInterface= Student::new;
        System.out.println(messageInterface.get("小方",18));
    }
}

结果:
在这里插入图片描述

4、对象方法引入

函数式接口:

/**
 * @author FPH
 */
@FunctionalInterface
public interface MessageInterface {
    String get(Main main);
}

main方法:

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        MessageInterface messageInterface= Main::sendMessage;
        System.out.println(messageInterface.get(new Main()));
    }
    public String sendMessage(){
        return "123";
    }
}

结果:

在这里插入图片描述

5、实战

jdk内置函数接口:Function的apply方法:

在这里插入图片描述

设参数为string,返回为Integer类型,我们可以这样设计:

import java.util.function.Function;

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        Function<String,Integer> function=(str)-> {
            return str.length();
        };
        System.out.println(function.apply("asdasd"));
    }
}

但我们可以通过对象方法引入简写以上代码:

import java.util.function.Function;

/**
 * @author FPH
 */
public class Main {
    public static void main(String[] args) {
        Function<String,Integer> function=String::length;
        System.out.println(function.apply("asdasd"));
    }
}

依旧可以得到同样的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值