A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© /aiq玩完?/aiq 中级黑马   /  2014-8-27 13:57  /  1663 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;
/*
黑马的入学测试题其中一道,做了2,3个小时。还是练习题做的太少,没有思路。
8、 存在一个JavaBean,它包含以下几种可能的属性:
        1:boolean/Boolean
        2:int/Integer
        3:String
        4:double/Double
        属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
        String类型的默认值为字符串 www.itheima.com
        int/Integer类型的默认值为100
        boolean/Boolean类型的默认值为true
        double/Double的默认值为0.01D.
        只需要设置带有getXxx/isXxx/setXxx方法的属性,
        非JavaBean属性不设置,请用代码实现
*/
import java.beans.*;
import java.lang.reflect.*;
public class Test8 {
        public static void main(String[] args) throws Exception
           {
                //获取测试类的字节码
                Class<JavaBean> clazz =JavaBean.class;
                //通过字节码获取对象
                Object bean = clazz.newInstance();
                //内省测试类,获取javaBean的属性信息
                BeanInfo info = Introspector.getBeanInfo(clazz);
                //获取把javaBean属性数组
                PropertyDescriptor[] pds = info.getPropertyDescriptors();
                //for迭代每个具体的属性
                for(PropertyDescriptor pd : pds){
                        //获取属性名
                        Object name = pd.getName();
                        //获取属性类型
                        Object type = pd.getPropertyType();
                        //获取get方法
                          Method getMethod = pd.getReadMethod();
                        //获取set方法
                        Method setMethod = pd.getWriteMethod();
                        //因为测试类是一个本类所以要去除它
                        if(!"class".equals(name)){
                        //调用修改前的属性
                        if(getMethod!=null)
                                System.out.println("修改前:"+getMethod.invoke(bean, null));
                        //修改各种属性
                        if(type==String.class)
                                setMethod.invoke(bean, "www.itheima.com");
                        else if(type==boolean.class)
                                setMethod.invoke(bean, true);
                        else if (type==double.class)
                                setMethod.invoke(bean, 0.01D);
                        else if(type==int.class)
                                setMethod.invoke(bean, 100);
                        //调用修改后的属性
                        if(getMethod!=null)
                        System.out.println("修改后:"+getMethod.invoke(bean, null));
                        }
                }
        }
}
//测试的类
class JavaBean{
        private boolean flag;
        private int x;
        private String str;
        private char[] ch;
        private long l;
        private double d;
                 
        public boolean isFlag() {
        return flag;
        }
        public void setFlag(boolean flag) {
                this.flag = flag;
        }
        public int getX() {
                return x;
        }
        public void setX(int x) {
                this.x = x;
                }
        public String getStr() {
                return str;
        }
        public void setStr(String str) {
                this.str = str;
        }
        public double getD() {
                return d;
        }
        public void setD(double d) {
                this.d = d;
        }
        public void show(long l)
        {
                this.l = l;
                System.out.println("http://www.itheima.com");
        }
}

2 个回复

倒序浏览
不错,就是代码规范点就更好了
回复 使用道具 举报
多谢LZ.................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马