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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 七宝 中级黑马   /  2013-9-23 14:37  /  1176 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

前些天做的题目,做得不完美,求高手指教:
题目: 存在一个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属性不设置,请用代码实现
  1. public class Demo {
  2.         public static void main(String[] args) throws Exception {
  3.                 JavaBean jb = new JavaBean();
  4.                
  5.        

  6.                 // 设置值
  7.                 setProperties(jb, "bool", true);
  8.                 setProperties(jb, "inte", 100);
  9.                 setProperties(jb, "string", "www.itheima.com");
  10.                 setProperties(jb, "doub", 0.01D);

  11.                 // 获取值
  12.                 System.out.println(getProperty(jb, "bool"));
  13.                 System.out.println(getProperty(jb, "inte"));
  14.                 System.out.println(getProperty(jb, "string"));
  15.                 System.out.println(getProperty(jb, "doub"));

  16.         }

  17.         // 定义获取属性 的方法
  18.         private static Object getProperty(JavaBean jb, String propertyName)
  19.                         throws IntrospectionException, IllegalAccessException,
  20.                         InvocationTargetException {
  21.                 PropertyDescriptor pb = new PropertyDescriptor(propertyName, jb
  22.                                 .getClass());
  23.                 Method methodGetX = pb.getReadMethod();
  24.                
  25.                 Object retVal = methodGetX.invoke(jb);
  26.                 return retVal;
  27.         }

  28.         // 定义设置属性的方法
  29.         private static void setProperties(JavaBean jb, String propertyName,
  30.                         Object value) throws IntrospectionException,
  31.                         IllegalAccessException, InvocationTargetException {
  32.                 PropertyDescriptor pb = new PropertyDescriptor(propertyName, jb
  33.                                 .getClass());
  34.                 Method methodSetX = pb.getWriteMethod();
  35.                 methodSetX.invoke(jb, value);
  36.         }
  37. }

  38. // 编写JavaBean类
  39. class JavaBean {
  40.         // 定义成员变量
  41.         private Boolean bool;
  42.         private Integer inte;
  43.         private String string;
  44.         private Double doub;

  45.         // 编写set和get方法
  46.         public Boolean getBool() {
  47.                 return bool;
  48.         }

  49.         public void setBool(Boolean bool) {
  50.                 this.bool = bool;
  51.         }

  52.         public Integer getInte() {
  53.                 return inte;
  54.         }

  55.         public void setInte(Integer inte) {
  56.                 this.inte = inte;
  57.         }

  58.         public String getString() {
  59.                 return string;
  60.         }

  61.         public void setString(String string) {
  62.                 this.string = string;
  63.         }

  64.         public Double getDoub() {
  65.                 return doub;
  66.         }

  67.         public void setDoub(Double doub) {
  68.                 this.doub = doub;
  69.         }

  70. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 25分啦!撒花撒花!

查看全部评分

3 个回复

倒序浏览
从你的代码中可以看出,set和get方法中的第一个PropertyDescriptor pb = new PropertyDescriptor(propertyName, jb.getClass());是可以抽取出来的,作为参数传递给方法,别看只有一行代码,但抽取后是一种代码复用性的表现。

再次,可以使用第三方的BeanUtils软件包,它比java本身提供的bean操作要方便的多。BeanUtils是一个工具类,其中的方法都是静态,可以通过类名调用。
setProperty(Object bean, String name, Object value)
getProperty(Object bean, String name)
用这两种方法要比自己通过反射操作bean方便多了。


评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
施大勇 发表于 2013-9-23 17:42
从你的代码中可以看出,set和get方法中的第一个PropertyDescriptor pb = new PropertyDescriptor(propertyN ...

主要问题不在这里
第一:我还没学到用第三方软件包,所以要用到最基础方法
第二:也就是主要问题,
  • 如果你不知道类里面的属性了 怎么设置了
  •    // 设置值
  •                 setProperties(jb, "bool", true);
  •                 setProperties(jb, "inte", 100);
  •                 setProperties(jb, "string", "www.itheima.com");
  •                 setProperties(jb, "doub", 0.01D);


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马