Java 8之Supplier接口方法应用

一、简介

  • Java Supplier是一个功能接口,代表结果的提供者。
  • Supplier的功能方法是get()。
  • 一个Supplier可以通过lambda表达式、方法引用或默认构造函数来实例化。
  • Supplier在Java 8中被引入,属于java.util.function包。

二、源码

@FunctionalInterface
public interface Supplier<T> {

	//get()方法不接受任何参数,只返回通用类型的值。
    T get();

}
  • 我们可以看到在上面的代码中,Supplier有get()方法,可以返回通用类型的值。
  • Java还提供了返回特定类型值的Supplier。
  • BooleanSupplier返回Boolean数据类型,IntSupplier返回Integer数据类型,LongSupplier返回Long数据类型,DoubleSupplier返回Double数据类型值。

三、使用示例

public class SupplierGet {

    public static void main(String[] args) {
        supplierTest();
    }

    public static void supplierTest() {
        //使用Lambda表达式实例化Supplier
        Supplier<String> supplier = () -> "hello 张三";
        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
        //输出:supplierTest-->hello 张三
        System.out.printf("{%s}-->{%s}%n", methodName, supplier.get());

        //使用方法引用实例化Supplier
        Supplier<String> supplier2 = User::getNameAndAge;
        //输出:supplierTest-->张三今年29了,加油!
        System.out.printf("{%s}-->{%s}%n", methodName, supplier2.get());

        //使用默认构造函数实例化Supplier
        Supplier<User> supplier3 = User::new;
        User user = supplier3.get();
        //输出:supplierTest-->张三
        System.out.printf("{%s}-->{%s}%n", methodName, user.getName());
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class User {

        public static String getNameAndAge() {
            return String.format("{%s}今年{%s}了,加油!", "张三", 29);
        }

        private String name = "张三";

        private int age = 29;
    }

}

四、总结

函数式编程应该用在抽象层次高、复用多的场景,而不是单纯业务逻辑的简单使用(反而影响代码的可阅读性)。找到具体场景中的最佳实践才能发挥函数式编程最大优点。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨忆南唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值