zoukankan      html  css  js  c++  java
  • 反射demo(拷贝一个对象)

    经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多。

    上次学习的链接,有一些反射用的基础语句。https://www.cnblogs.com/deepSleeping/p/9381785.html

    package deep.blob.test;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    import org.junit.Test;
    
    import deep.blob.entity.Employee;
    
    public class demo {
    
        @Test
        public void fun(){
            Employee emp = new Employee();
            emp.setId("1001");
            emp.setName("张三");
            emp.setGender("男");
            emp.setAge(21);
            
            cloneEmp(emp);
        }
    
        private Object cloneEmp(Object emp) {
            //1.获得需要克隆的类的class对象
            Class<?> clazz = emp.getClass();
            
            //2.获得所有属性
            Field[] fields = clazz.getDeclaredFields();
            
            //3.定义被克隆的对象
            Object newInstance = null;
            try {
                newInstance = clazz.newInstance();
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            //4.遍历所有的属性并获得值
            for(Field field : fields){
                try {
                    if (!field.getName().equals("serialVersionUID")) {
                        //设置可以访问private的属性
                        field.setAccessible(true);
                        
                        //获取克隆对象的对应属性的值并赋值给被克隆对象的对应属性名的属性
                        field.set(newInstance, field.get(emp));
                    }
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
    
            Method method = null;
            try {
                method = clazz.getMethod("toString");
                System.out.println(method.invoke(newInstance));
            } catch (NoSuchMethodException | SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return newInstance;
            
        }
    }
     1 package deep.blob.entity;
     2 
     3 import java.io.Serializable;
     4 
     5 /**
     6  * 员工实体类
     7  * @author DeepSleeping
     8  *
     9  */
    10 public class Employee implements Serializable{
    11 
    12     private static final long serialVersionUID = 1L;
    13     
    14     private String id;
    15     private String name;
    16     private String gender;
    17     private Integer age;
    18     
    19     public String getId() {
    20         return id;
    21     }
    22     public void setId(String id) {
    23         this.id = id;
    24     }
    25     public String getName() {
    26         return name;
    27     }
    28     public void setName(String name) {
    29         this.name = name;
    30     }
    31     public String getGender() {
    32         return gender;
    33     }
    34     public void setGender(String gender) {
    35         this.gender = gender;
    36     }
    37     public Integer getAge() {
    38         return age;
    39     }
    40     public void setAge(Integer age) {
    41         this.age = age;
    42     }
    43     
    44     @Override
    45     public String toString() {
    46         return this.getId() + ":" + this.getName();
    47     }
    48 
    49 }

  • 相关阅读:
    OpenGL Geometry Shader
    正向渲染路径细节 Forward Rendering Path Details
    Tessellation
    渲染路径-实时渲染中常用的几种Rendering Path
    ugui batches
    如何有效提升Unity Gear VR游戏性能
    Unity3D命令行Build
    手机游戏资源 特效 显存分析工具
    换装demo时美术遇到的问题详解
    Rigging a Versatile Weapon Bone for 3ds Max
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/9799914.html
Copyright © 2011-2022 走看看