黑马程序员技术交流社区

标题: 笔试题 [打印本页]

作者: 眷恋从前的日子    时间: 2015-3-11 23:06
标题: 笔试题
存在一个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.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Method;
//建立模拟JavaBean类

class JavaBean{

      //成员变量

      private boolean flag;

      private int number;

      private String itcast;

      private double money;

     

      //成员变量相应的set和get方法

      public void setItcast(String newitcast){

              itcast=newitcast;

      }

      public String getItcast(){

              return itcast;

      }

     

      public void setNumber(int newnumber){

              number=newnumber;

      }

      public int getNumber(){

              return number;

      }

     

      public void setFlag(boolean newflag){

              flag=newflag;

      }

      public boolean getFlag(){

              return flag;

      }

     

      public void setMoney(double newmoney){

              money=newmoney;

      }

      public double getMoney(){

              return money;

      }

}

public class Test6 {

      public static void main(String[] args) throws Exception {

                   //拿到字节码

                      Class<JavaBean> clazz=JavaBean.class;

                   //拿到字节码的一个对象实例

                      Object obj=clazz.newInstance();

                   //通过字节码拿到BeanInfo实例对象

                      BeanInfo beanInfo=Introspector.getBeanInfo(clazz);

                   //通过BeanInfo拿到这个字节码的所有属性描述

                      PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();

                  //通过属性描述对象拿到属性对应的set方法和get方法,通过set方法进行属性赋值

                      for(PropertyDescriptor pd:pds){

                   //拿到当前属性的set方法

                       Method setMethod=pd.getWriteMethod();

                   Method getMethod=pd.getReadMethod();

                             

                   //拿到当前属性的类型字节码

                      Class<?> properclass=pd.getPropertyType();

                  //通过字节码来筛选出相应的属性,再对应赋值,赋值完毕后,通过打印get方法查看赋值情况。

                      if(properclass==String.class){

                   setMethod.invoke(obj, "www.itheima.com");

                   System.out.println(getMethod.invoke(obj));

                   }else if(properclass==int.class || properclass==Integer.class){

                 setMethod.invoke(obj, 100);

                 System.out.println(getMethod.invoke(obj));

                  }else if(properclass==Boolean.class || properclass==boolean.class){

                 setMethod.invoke(obj, true);

                System.out.println(getMethod.invoke(obj));

                }else if(properclass==Double.class || properclass==double.class){

                setMethod.invoke(obj, 0.01D);

                System.out.println(getMethod.invoke(obj));

                              }

                             

                      }                        

            }         

      }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2