黑马程序员技术交流社区

标题: BeanUtils 问题,JavaBean类为什么要修饰为public的? [打印本页]

作者: 唐辉辉    时间: 2012-6-24 10:13
标题: BeanUtils 问题,JavaBean类为什么要修饰为public的?
本帖最后由 唐辉辉 于 2012-6-24 10:51 编辑
  1. import org.apache.commons.beanutils.BeanUtils;


  2. public class BeanUtilsDemo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) throws Exception {
  7.                 // TODO Auto-generated method stub
  8.                 BeanUtilsData bud = new BeanUtilsData(3, 9);
  9.                
  10.                 BeanUtils.setProperty(bud, "y", "19");
  11.                 System.out.println(bud.getY());
  12.                 //System.out.println(BeanUtils.getProperty(isd, "y"));
  13.         }

  14. }

  15. class BeanUtilsData{
  16.         
  17.         private int x;
  18.         private int y;
  19.         
  20.         public BeanUtilsData(int x, int y) {
  21.                 super();
  22.                 this.x = x;
  23.                 this.y = y;
  24.         }
  25.         public int getX() {
  26.                 return x;
  27.         }
  28.         public void setX(int x) {
  29.                 this.x = x;
  30.         }
  31.         public int getY() {
  32.                 return y;
  33.         }
  34.         public void setY(int y) {
  35.                 this.y = y;
  36.         }
  37. }
复制代码
Exception in thread "main" java.lang.reflect.InvocationTargetException: Cannot set y
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1019)
        at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:456)
        at BeanUtilsDemo.main(BeanUtilsDemo.java:13)
Caused by: java.lang.NoSuchMethodException: Property 'y' has no setter method in class 'class BeanUtilsData'
        at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2138)
        at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1957)
        at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:2064)
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1017)
        ... 2 more


报错的地方现在已经找到,需要把JavaBean类修饰为public的。但为什么要修饰为public呢?  有没有朋友知道原因?



作者: 赵玮_Tom    时间: 2012-6-24 10:47
菜鸟答题{:soso_e113:}这个问题涉及到一些javabean的规范。先从javabean的用途说起,javabean一般就是用来传递数据的特殊java类,在web开发中应用较多。简单说javabean多用于封装属性,而很少具备某些特定的方法功能。试想,javabean的功能就是传递数据,那么类权限为共有也就不足为奇了。下面是标准javabean要遵守的一些规范:
1. 类访问权限为公有
2. 所有属性为私有
3. 每个字段对外提供setter方法和getter方法
4. 具备一个无参的构造方法
作者: 唐辉辉    时间: 2012-6-24 10:50
赵玮_Tom 发表于 2012-6-24 10:47
菜鸟答题这个问题涉及到一些javabean的规范。先从javabean的用途说起,javabean一般就是用来 ...

明白了。谢谢 !!
作者: Jeik    时间: 2014-11-2 18:14
你好以上两位哥们,javaBean用成public无非就是让所有的其他类能够访问而已。那么上述例子中我将javaBean定义为一个内部类,通过外部类构建起对象,在通过BeanUtils来操作javaBean,理论上是可以访问到的呀!但是为什么不行里?




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