013--反射获取一个类的相关属性

参考网址:http://www.cnblogs.com/muke-steven/p/5523650.html

Demo下载地址:http://pan.baidu.com/s/1sltyWUT(里面将set和get方法都进行了使用)

核心代码

    /**
     * 方法描述:直接将里面的属性进行赋值
     * @param object
     * @throws Exception
     * @return void
     * @throws BusinessException
     */
    public static void setObjectValue(Object javaBean) throws Exception {
        // 我们项目的所有实体类都继承BaseDomain (所有实体基类:该类只是串行化一下)
        // 不需要的自己去掉即可
        if (javaBean != null && javaBean instanceof User) {// if (object!=null )
            // 拿到该类
            Class clazz = javaBean.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                Field field = fields[i];
                field.setAccessible(true); // 设置些属性是可以访问的
                Object val = field.get(javaBean);// 得到此属性的值

                System.out.println("name:" + field.getName() + "\t value = " + val);

                String type = field.getType().toString();// 得到此属性的类型
                if (type.endsWith("String")) {
                    System.out.println(field.getType() + "\t是String");
                    field.set(javaBean, "12"); // 给属性设值
                } else if (type.endsWith("int") || type.endsWith("Integer")) {
                    System.out.println(field.getType() + "\t是int");
                    field.set(javaBean, 12); // 给属性设值
                } else {
                    System.out.println(field.getType() + "\t");
                }
            }
        }
    }

    /**
     * 方法描述:将里面的值全部打印出来
     * @param object
     * @throws Exception
     * @return void
     * @throws BusinessException
     */
    public static void getObjectValue(Object javaBean) throws Exception {
        // 我们项目的所有实体类都继承BaseDomain (所有实体基类:该类只是串行化一下)
        // 不需要的自己去掉即可
        if (javaBean != null && javaBean instanceof User) {// if (object!=null )
            // 拿到该类
            Class clazz = javaBean.getClass();
            // 获取实体类的所有属性,返回Field数组
            Field[] fields = clazz.getDeclaredFields();

            for (Field field : fields) {// --for() begin
                System.out.println(field.getGenericType());// 打印该类的所有属性类型
                System.out.println("属性名:"+field.getName());
                // 如果类型是String
                if (field.getGenericType().toString().equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class
                                                                                            // ",后面跟类名
                    // 拿到该属性的gettet方法
                    Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));

                    String val = (String) m.invoke(javaBean);// 调用getter方法获取属性值
                    if (val != null) {
                        System.out.println("String type:" + val);
                    }

                }

                // 如果类型是Integer
                if (field.getGenericType().toString().equals("class java.lang.Integer")) {
                    Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
                    Integer val = (Integer) m.invoke(javaBean);
                    if (val != null) {
                        System.out.println("Integer type:" + val);
                    }

                }

                // 如果类型是Double
                if (field.getGenericType().toString().equals("class java.lang.Double")) {
                    Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
                    Double val = (Double) m.invoke(javaBean);
                    if (val != null) {
                        System.out.println("Double type:" + val);
                    }

                }

                // 如果类型是Boolean 是封装类
                if (field.getGenericType().toString().equals("class java.lang.Boolean")) {
                    Method m = (Method) javaBean.getClass().getMethod(field.getName());
                    Boolean val = (Boolean) m.invoke(javaBean);
                    if (val != null) {
                        System.out.println("Boolean type:" + val);
                    }

                }

                // 如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的
                // 反射找不到getter的具体名
                if (field.getGenericType().toString().equals("boolean")) {
                    Method m = (Method) javaBean.getClass().getMethod(field.getName());
                    Boolean val = (Boolean) m.invoke(javaBean);
                    if (val != null) {
                        System.out.println("boolean type:" + val);
                    }

                }
                // 如果类型是Date
                if (field.getGenericType().toString().equals("class java.util.Date")) {
                    Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
                    Date val = (Date) m.invoke(javaBean);
                    if (val != null) {
                        System.out.println("Date type:" + val);
                    }

                }
                // 如果类型是Short
                if (field.getGenericType().toString().equals("class java.lang.Short")) {
                    Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
                    Short val = (Short) m.invoke(javaBean);
                    if (val != null) {
                        System.out.println("Short type:" + val);
                    }
                }
                // 如果还需要其他的类型请自己做扩展

            } // for() --end

        } // if (object!=null ) ----end
    }

    // 把一个字符串的第一个字母大写、效率是最高的、
    private static String getMethodName(String fildeName) throws Exception {
        byte[] items = fildeName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }

调用方法

User user = new User("小明", "123456", 15, true);
//1.set方法
ReflectUtils.setObjectValue(user);
//2.get方法
ReflectUtils.getObjectValue(user);

你可能感兴趣的:(013--反射获取一个类的相关属性)