• 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





  • 相关阅读:
    Hdu3022 Sum of Digits
    bzoj3864 Hero meet devil
    bzoj2448 挖油
    poj3783 Balls
    bzoj3802 Vocabulary
    Hdu5181 numbers
    Hdu5693 D Game
    图形填充之边标志算法
    图形填充之栅栏填充算法
    图形填充之种子填充算法
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/a261a94b01777681c6db06b1be2ddff8.html
Copyright © 2020-2023  润新知