• Generator的理解


    学习了Think in java 的 第十七章 容器的深入研究后,我了解了一个Generator类。

    我的理解是,Generator类使用来根据传入的Class类型,来创建对象的类。首先看一下代码:

    package com.example.demo.sjms.GeneratorTest;
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月26日 09:11:58
     *  @Description: Generator类
     */
    public interface Generator<T> {
        T next();
    }
    package com.example.demo.sjms.GeneratorTest;
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月26日 09:11:20
     *  @Description: Generator实现类
     */
    public class GeneratorImpl<T> implements Generator<T>{
        private Class<T> clazz;
        public GeneratorImpl(Class<T> clazz){
            this.clazz = clazz;
        }
        @Override
        public T next() {
            try{
                return clazz.newInstance();
            }catch(Exception e){
                throw new RuntimeException(e);
            }
        }
        public static <T> Generator<T> getGenerator(Class<T> clazz){
            return new GeneratorImpl<T>(clazz);
        }
    }
    /**
     *  @Author: caesar
     *  @Date:2020年11月26日 09:11:43
     *  @Description: 实体类
     */
    public class CountedObject {
        private static long counter = 0;
        private final long id = counter++;
        public long id(){ return id; }
        public String toString(){ return "CountedObject " + id; }
    }

    测试类:

    package com.example.demo.sjms.GeneratorTest;
    
    /**
     * @Author: caesar
     * @Date:2020年11月26日 09:11:02
     * @Description: 测试类
     */
    public class Test {
        public static void main(String[] args) {
            Generator<CountedObject> generatorImpl = GeneratorImpl.getGenerator(CountedObject.class);
            for (int i = 0; i < 4; i++) {
                System.out.println(generatorImpl.next());
            }
        }
    }

    我认位这个类存在的原因是,首先,new一个类可以手动new可以通过Class来反射创建,但是呢,比如有一个方法,需要根据你传入的类型来创建对应的对象,你怎搞,当然可以传入类型,在方法中通过反射来创建类。那么,突然想到了,为什么不把这个创建过程给他封装成类呢,这样的话,直接给方法传入一个泛型的类,这个类用于创建对象,直接传入后,调用方法进行创建,完事。

  • 相关阅读:
    炒鸡简单的视频站
    wpf 禁用启用webbroswer右键菜单
    微信小程序怎么获取当前页面的url
    wpf获取webbroswer的两个方法
    WPF使用Webbrowser操作网页的主要代码
    wpf获取目录路径
    c:if标签--判断不为空和其他的值判断
    Mybatis自动生成Xml文件,针对字段类型为text等会默认产生XXXXWithBlobs的方法问题
    Java集合系列之HashMap
    html自动刷新
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/14041103.html
Copyright © 2020-2023  润新知