• Java之反射机制五:反射优化方式之一


    一:实体类

    package reflex;
    public class BigDog extends Dog {
        private Integer age;
    
        public String name;
        public String name2;
        public String name3;
        public String name4;
        public String name5;
        public String name6;
        public String name7;
        public String name8;
        public String name9;
        public String name10;
        public String name11;
        public String name12;
    
        public BigDog(){}
    
        public BigDog(Integer age){
            this.age = age;
        }
    
        private void getDog(){}
    
        private BigDog(Integer age, String name) {
            this.age = age;
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "BigDog{" +
                    "age=" + age +
                    '}';
        }
    }

    二:优化方式之一(不明显)

    package reflex;
    
    import org.junit.Test;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    
    public class ReflectService {
        private static Map<String, Field> fieldMap = new HashMap<>();
    
        static {
            Field[] fields = BigDog.class.getDeclaredFields();
            Method[] methods = BigDog.class.getDeclaredMethods();
            Arrays.asList(fields).forEach(field -> {
                field.setAccessible(true);
                String str = field.toString();
                String attribute = str.substring(str.lastIndexOf(".")+1);
                fieldMap.put(attribute,field);
            });
        }
    
        public long test() throws Exception {
            long start = System.currentTimeMillis();
            for(int i = 0;i<100000000;i++){
                BigDog bigDog = new BigDog();
                Field age = bigDog.getClass().getDeclaredField("age");
                age.setAccessible(true);
                age.set(bigDog,1);
            }
            long end = System.currentTimeMillis();
            System.out.println((end-start)+"ms");
            return end-start;
        }
    
        public long test2() throws Exception {
            long start = System.currentTimeMillis();
            for(int i = 0;i<100000000;i++){
                BigDog bigDog = new BigDog();
                Field age = fieldMap.get("age");
                age.set(bigDog,1);
            }
            long end = System.currentTimeMillis();
            System.out.println((end-start)+"ms");
            return end-start;
        }
    
        @Test
        public void test3() throws Exception{
            long test = test();
            long test2 = test2();
            System.out.println((test - test2)+"ms");
        }
    }

    运行结果:

    6954ms

    1358ms

    5596ms

  • 相关阅读:
    Git使用指南(2)——工作区,暂存区,版本库
    Git使用指南(1)——Git配置命令
    JavaScript使用技巧(1)——JS常用的函数
    Sublime Text 3使用指南(2)——快捷键
    Markdown使用指南(2)—— 键盘符号说明
    Sublime Text 3使用指南(1)——安装package control组件
    工具脚本类使用指南(1)—— 获取浏览器地址栏参数信息
    Markdown使用指南(1)——基础语法
    项目1
    表单提交多对多,一对多,组,工作小技巧
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12542880.html
Copyright © 2020-2023  润新知