利用反射机制动态的调用类信息

public class reflectTest {
    /**
     * 利用反射设置实体类的属性
     *
     * @return
     * @throws ClassNotFoundException
     * @throws IllegalAccessException
     * @throws InstantiationException
     * @throws NoSuchFieldException
     * @throws SecurityException
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     */
    public static boolean setAttributes(Class<?> classPath)
            throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException,
            NoSuchFieldException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
        Class cls;

        cls = Class.forName(Student.class.getName());

        Object tObject = cls.newInstance();

        Field field = cls.getDeclaredField("id");

        field.setAccessible(true); // 设置私有属性范围

        field.set(tObject, 10);

        System.out.print("field得到的值" + field.get(tObject) + "\n");

        Method method = cls.getMethod("setId", int.class);

        method.invoke(tObject, 11);

        Method getMethod = cls.getMethod("getId");

        System.out.println("method得到的值" + getMethod.invoke(tObject));

        return true;
    }

    /**
     * 利用反射获取实体类的属性
     *
     * @return
     * @throws IntrospectionException
     * @throws ClassNotFoundException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     */
    public static boolean getAttributes(Class<?> classPath, Object obj) throws IntrospectionException,
            ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        PropertyDescriptor[] pds;
        pds = Introspector.getBeanInfo(classPath).getPropertyDescriptors();

        Class cls = Class.forName(classPath.getName());

        Field[] fieldlist = cls.getDeclaredFields();

        for (PropertyDescriptor pd : pds) {

            for (int i = 0; i < fieldlist.length; i++) {

                if (fieldlist[i].getName().equals(pd.getName())) {

                    Method getter = pd.getReadMethod();

                    Object value = getter.invoke(obj);

                    System.out.println(fieldlist[i].getName() + "==="

                            + value);
                }
            }
        }

        return true;
    }

    public static void main(String[] args) throws IllegalArgumentException, IntrospectionException,
            ClassNotFoundException, IllegalAccessException, InvocationTargetException, SecurityException,
            InstantiationException, NoSuchFieldException, NoSuchMethodException {
        Student student = new Student();

        student.setAddress("china");

        student.setEmail("zt123qq.com");

        student.setId(1);

        student.setName("zt");

        Birthday day = new Birthday("2010-11-22");

        student.setBirthday(day);

        System.out.println(getAttributes(Student.class, student));

        System.out.println(setAttributes(Student.class));

    }

}
时间: 2024-10-11 04:09:13

利用反射机制动态的调用类信息的相关文章

利用反射机制,获取类的字段、方法、并实现简单调用

这篇文章是为之后要介绍Android的ICO框架做预备的,所以,如果想最近学习Android的ICO框架的同学,可以稍微看一下. 首先,简单介绍一下Java里面的反射. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 不知道这样的一段解释,你能否看懂.如果更简单的说,反射就是能够根据你给出类名实例化出一个实实在在的对象.所以,对象的实例

Android利用反射机制为实体类属性赋值

在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面是在我在android中如何利用java反射机制给实体类赋值. 在Android中利用反射机制为实体类属性赋值,首先需要导入一下两个包 import java.lang.reflect.Field; import java.lang.reflect.Method; 给实体类赋值首先需要一个实体类,这

java反射机制(一)—— 利用反射机制实例化对象

一.Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体.或对其fields设值.或唤起其methods.(度娘文库是这么说的) 二.这篇文章主要介绍一下通过反射机制去实例化一个类的对象,然后调用其方法.本文主要介绍两种方式,第一种就是通过构造函数来实例化,第二种就是通过Cl

java中利用反射机制绕开编译器对泛型的类型限制

首先看下面这个例子 public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.pr

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值

一.准备知识:   Java反射机制   处理事务的JavaBean   String的操作常用方法 二.模拟步骤   这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值. 1.首先创建一个简单的User类包含两个属性username和userid以及getter.setter方法: class User {     public User(){} private String username; private String userid; public String getUs

利用反射机制,对对象的属性值进行自动设置

import java.lang.reflect.Method; /** * 对象的属性值自动设置,利用反射机制 */ public class AutoSet { /** * 将源对象的属性值赋值到目标对象,属性名一致,且源对象有get方法,目标对象有set方法 * @param src 源对象 * @param target 目标对象 * @return 赋值后的目标对象 */ public static Object autoGetterAndSetter(Object src, Obje

利用反射机制 实现 javabean 转化为 map

package com.test.entity; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Collection; import java.util.Date; import java.util.HashMap;

java利用反射机制判断对象的属性是否为空

java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String>(); validateMap.put("serial", "编号");validateMap.put("major", "专业"); public static <T> String validateFiledIs