• 反射案例 -复制一个对象


    package com.iotek.classtype;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    public class FansheDemo {
        public static void main(String[] args) {
            // 2,生成一个学生对象(被复制的那个对象,原对象)
            Student student = new Student(1, "谭磊", 20);
            try {
                Student student2=(Student)ObjectCopuUtil.copyObject(student);
                System.out.println("复制成功");
               System.out.println(student2.toString());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
    
        }
    }
    
    // 创建一个拷贝对象的工具类,内部提供一个拷贝方法 接收原对象
    class ObjectCopuUtil {
        public static Object copyObject(Object object) throws Exception {
            // 3.获取Student对所对应类型的class对象(也就是Student这个类所对应的class对象)
            Class<?> class1 = object.getClass();
            // 4.通过class对象的newInstance()方法来构建一个目标对象
            Object objres = class1.newInstance();
            // 5.获取class对象的get和set方法
            for (Field fieldt : class1.getDeclaredFields()) {
                    /*//得到属性所对应的get和set方法 
                     String setMethodName="set"
                    +fieldt.getName().substring(0, 1).toUpperCase()
                     +fieldt.getName().substring(1);
                     String getMethodName="get"
                            +fieldt.getName().substring(0, 1).toUpperCase()
                             +fieldt.getName().substring(1);
                     //调用原对象的get方法获得属性值
                     Method getmethod=class1.getDeclaredMethod(getMethodName, new Class[] {});
                     Object value=getmethod.invoke(object, new Object[] {});
                     
                     //调用目标对象的set方法来给属性赋值=
                     Method setmethod=class1.getDeclaredMethod(setMethodName, new Class[] {fieldt.getType()});
                     setmethod.invoke(object, new Object[] {value});*/
                     
                //直接获取原对象属性的值
                fieldt.setAccessible(true);
                Object value=fieldt.get(object);
                fieldt.set(objres, value);
            }
    
            return objres;
    
        }
    }
    
    // 1,声明一个学生类
    class Student {
        private int id;
        private String name;
        private int age;
    
        public Student() {
            super();
        }
    
        public Student(int id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
    
    }
  • 相关阅读:
    理解SVG坐标系统和变换: transform属性
    在svg文间画图过程中放大缩小图片后,坐标偏移问题
    理解SVG的缩放 偏移的计算公式
    svg 实践之屏幕坐标与svg元素坐标转换
    Winform 程序打包及安装
    使用bootstrap table小记(表格组件)
    MVC实现多级联动
    微信公众号开发之网页中及时获取当前用户Openid及注意事项
    微信公众号开发之网页授权获取用户基本信息
    微信公众号开发之自动消息回复和自定义菜单
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9998774.html
Copyright © 2020-2023  润新知