当前位置:首页 > Java技术 > java反射的实际应用

java反射的实际应用

2022年08月05日 08:34:41Java技术2

java反射覆盖

    功能:用于某个对象的新旧值进行更新覆盖操作。用途:常用于电商系统订单以及商品的新旧更新。

具体代码:下面以学生实体类进行讲解。

/**
 * 学生类
 */
public class Student {
    private Integer sid;
    private String sname;
    private Integer age;
    private String gender;

    public Student(int sid, String sname, int age, String gender) {
        this.sid = sid;
        this.sname = sname;
        this.age = age;
        this.gender = gender;
    }



    public Student(String sname, Integer age, String gender) {
        this.sname = sname;
        this.age = age;
        this.gender = gender;
    }

    public Student() {
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }



    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

 

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * 反射工具类
 */
public class ReflectUtils {

    /**
     * 反射覆盖
     *
     */
    public static void saveOrupdate(Object s1,Object s2) throws  Exception{
        Class<?> c1=s1.getClass();
        Class<?> c2=s2.getClass();
        Field[] fields=c1.getDeclaredFields();
        for(Field field:fields) {
            field.setAccessible(true);
            String name = field.getName(); // 获取属性的名字
            name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
            String type = field.getGenericType().toString(); // 获取属性的类型
            if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
                Method m = c2.getMethod("get" + name);
                String value = (String) m.invoke(s2); // 调用getter方法获取属性值
                field.set(s1,value);
            }
            if (type.equals("class java.lang.Integer")) {
                Method m = c2.getMethod("get" + name);
                Integer value = (Integer) m.invoke(s2);
                field.set(s1,value);
            }

            if (type.equals("class java.lang.Boolean")) {
                Method m = c2.getMethod("get" + name);
                Boolean value = (Boolean) m.invoke(s2);
                field.set(s1,value);
            }
            if (type.equals("class java.util.Date")) {
                Method m = c2.getMethod("get" + name);
                Date value = (Date) m.invoke(s2);
                field.set(s1,value);
            }
        }

    }

    public static void main(String[] args) {
        Student s1=new Student(1,"张三",24,"男");
        Student s2=new Student("赵薇",38,"女");
        try {
            saveOrupdate(s1,s2);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(s1.toString());

    }
}

 

作者:皓月苍狼
来源链接:https://www.cnblogs.com/haoyuecanglang/p/11457579.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17663.html

分享给朋友:

“java反射的实际应用” 的相关文章

java反射的应用(Hibernate)

java反射的应用(Hibernate)          Hibernate是一个屏蔽了JDBC,实现了ORM的java框架,利用该框架我们可...

java反射详解之反射作用

java反射详解之反射作用

本文转载两篇文章,前一部分很好的解释了Java 反射在开发中的作用机制,后一部分详细给出了反射的运用案例。 第一部分: 反射作用 Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。...

Java反射笔记

Java反射笔记

Java反射笔记 1:Class类 同Object,String等类一样,Class也是一个类 构造函数只可由JVM调用,不可由开发者调用。 任何一个类均是Class类的实例对象。 任何继承Object的对象均有 g...

浅谈Java反射的实现原理

从一段示例代码开始 Class clz = Class.forName("ClassA"); Object instance = clz.newInstance(); Method method =...

JAVA中的反射机制以及在Spring中的应用

文章目录 一 反射机制 二 反射机制的使用-Class类 三 为什么要使用反射 3.1 静态编译 3.2 动态编译 3.3 反射的好处...

利用JAVA反射,读取数据库表名,自动生成对应实体类

本代码是利用java反射,读取数据库表自动根据表名生成实体类,数据库采用老牌SQLSERVER 2000,驱动为JTDS,其他数据库可根据情况自定修改。 代码中包含了大部分数据库类型与JAVA类型的转换,少数未包含进去的会在生成代码时打印出来,方面后期查找修改。 本文...

java反射机制及Method.invoke方法(转载)

java反射机制及Method.invoke方法(转载)

1.java反射机制主要提供了以下功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法 Reflection 是Java被视为动态(或准动态)语言的一个关...

Java反射机制及用途

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; class.forName(类名)//获得类      这种动态获取的信息以及...

【译】1. Java反射——引言

【译】1. Java反射——引言

原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov   Java的反射机制使得它可以在运行时检查类、接口、字段、方法,而在编译时并不不知道它们的名称。也可以通过反射...

Java反射,注解,以及动态代理

Java反射,注解,以及动态代理

Java反射,注解,以及动态代理 基础  最近在准备实习面试,被学长问到了Java反射,注解和动态代理的内容,发现有点自己有点懵,这几天查了很多资料,就来说下自己的理解吧【如有错误,望指正】...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。