zoukankan      html  css  js  c++  java
  • java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同时,又可以让我们省掉很多单纯靠分析传入的属性值来决定给实体对象设置哪些属性的值。

        JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

        JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

        Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

        下面我们就拿一个实际的例子来阐述运用java的反射机制来达到设置和获取一个实体类的属性值的方法。

    package com.ultrapower.ultracmdb.inventory.webapp.component.special.modelManager.util;
    import java.lang.reflect.Field;
    public class TestInvoke
    {
        @SuppressWarnings("rawtypes")
        public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException
        {
            Perpole bean = new Perpole();
            // 得到类对象
            Class userCla = (Class) bean.getClass();
            /*
             * 得到类中的所有属性集合
             */
            Field[] fs = userCla.getDeclaredFields();
            for(int i = 0;i < fs.length;i++)
            {
                Field f = fs[i];
                f.setAccessible(true); // 设置些属性是可以访问的
                Object val = f.get(bean);// 得到此属性的值
                System.out.println("name:" + f.getName() + "	 value = " + val);
                String type = f.getType().toString();// 得到此属性的类型
                if(type.endsWith("String"))
                {
                    System.out.println(f.getType() + "	是String");
                    f.set(bean,"caocao"); // 给属性设值
                }
                else if(type.endsWith("int") || type.endsWith("Integer"))
                {
                    System.out.println(f.getType() + "	是int");
                    f.set(bean,12); // 给属性设值
                }
                else
                {
                    System.out.println(f.getType() + "	");
                }
            }
            
            
            System.out.println("======================================");
            System.out.println("设置后的bean的值为:
    "+bean.getName()+"	"+bean.getAge());
        }
    }
    class Perpole
    {
        private String name;
        private int age;
        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;
        }
        
    }

    原文出处:

    [1] 码上中国博客, java 中利用反射机制获取和设置实体类的属性值, https://mp.csdn.net/postedit

  • 相关阅读:
    【科创人上海行】扶墙老师王福强:架构师创业要突破思维局限,技术人创业的三种模式,健康第一
    【科创人·独家】连续创业者高春辉的这六年:高强度投入打造全球领先的IP数据库
    中国确实需要大力扩充核武器
    SAP MM 可以通过STO在公司间转移质检库存?
    SAP MM 如何看一个采购申请是由APO系统创建后同步过来的?
    SAP MM 如何看一个Inbound Delivery单据相关的IDoc?
    SAP ECC & APO集成
    SAP MM 采购订单收货之后自动形成分包商库存?
    SAP MM 带有'Return'标记的STO,不能创建内向交货单?
    SAP MM 没有启用QM的前提下可以从QI库存里退货给Vendor?
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10104085.html
Copyright © 2011-2022 走看看