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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:
package com.itheima;
import java.beans.*;
import java.lang.reflect.*;
public class Test5 {

        /**
         * 5、 存在一个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属性不设置,请用代码实现
         * @param args
         */
        public static void main(String[] args) throws Exception
        {   
               
                Class clazz = Class.forName("cn.heima.test.testBean");  
                Object bean = clazz.newInstance();
                BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
                 
                // System.out.println(beanInfo);
                  PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                  
                  for (PropertyDescriptor pd : propertyDescriptors)
                  {    // System.out.println(pd);    // 获取属性名
                           Object name = pd.getName();    // 获取属性类型
                           Object type = pd.getPropertyType();    // 获取get方法
                           Method getMethod = pd.getReadMethod();    // 获取set方法
                           Method setMethod = pd.getWriteMethod();  
                           if (!"class".equals(name))
                           {     
                                   if (setMethod != null)
                                   {      
                                           if (type == boolean.class || type == Boolean.class)
                                                   setMethod.invoke(bean, true);     
                                           if (type == String.class)
                                                   setMethod.invoke(bean, "www.itheima.com");      
                                           if (type == int.class || type == Integer.class)
                                                   setMethod.invoke(bean, 100);      
                                           if (type == double.class || type == Double.class)  
                                                           setMethod.invoke(bean, 0.01D);         
                                   }
                                   if (getMethod != null)
                                           System.out.println(type + " " + name + "=" + getMethod.invoke(bean, null));     
                                     
                           }   
                  }  
        }
}  
class testBean
{
        private boolean b;  private Integer i;
        private String str;  private Double d;  
       
        public Boolean getB() {return b;}   
       
        public void setB(Boolean b)  {this.b = b; }
       
        public Integer getI() {   return i;  }  
       
        public void setI(Integer i) {   this.i = i;  }  
       
        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;  }

}

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

3 个回复

正序浏览
本帖最后由 Gonnaloveu 于 2015-1-24 08:57 编辑

API是这么说的
当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常:
Class 类中的 forName 方法。
ClassLoader 类中的 findSystemClass 方法。
ClassLoader 类中的 loadClass 方法。
但是没有找到具有指定名称的类的定义。
也就是JavaBean不存在,你得创建一个啊...可能不是public 他找不到
回复 使用道具 举报
起床的同学,麻烦看看呀:Q
回复 使用道具 举报
代码本身,我没能找出什么问题,有怀疑是不是eclipse本身配置的问题,麻烦大家帮忙看看,先谢谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马