java8的Supplier

TOC

java8的Supplier

参考:

java.util.function.Supplier

定义

supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,每次调用get()方法时都会调用构造方法创建一个新对象

public class TestSupplier {
    private int age;
    TestSupplier(){
        System.out.println(age);
    }
    public static void main(String[] args) {
//创建Supplier容器,声明为TestSupplier类型,此时并不会调用对象的构造方法,即不会创建对象
        Supplier<TestSupplier> sup= TestSupplier::new;
        System.out.println("--------");
//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
        sup.get();
//每次get都会调用构造方法,即获取的对象不同
        sup.get();
    }
}
输出结果:
--------
0
0

源码

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

案例

类似多例调用

    @Bean
    public Supplier<User> hbaseConnSupplier() {
        return () -> {
            User user = new User((int) (Math.random() * 1000));
            System.out.println("调用了hbaseConnSupplier,User:id:" + user.getId());
            return user;
        };
    }

controller调用

    @Autowired
    private Supplier<User> hbaseConnSupplier;
    @RequestMapping("/test2")
    public void test2(){
        User user = hbaseConnSupplier.get();
        System.out.println("test2:user:id:"+ user.getId());
        System.out.println("test2:user:id2:"+ user.getId());
        user=hbaseConnSupplier.get();
        System.out.println("test2:user:id3:"+ user.getId());
        System.out.println("----------------------");
    }

输出

调用了hbaseConnSupplier,User:id:286
test2:user:id:286
test2:user:id2:286
调用了hbaseConnSupplier,User:id:13
test2:user:id3:13
----------------------

每次调用get方法都获取一个新的User





posted @   紫月java  阅读(1940)  评论(0编辑  收藏  举报
编辑推荐:
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
阅读排行:
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?
点击右上角即可分享
微信分享提示