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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨增坤 金牌黑马   /  2013-10-18 19:53  /  1141 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-10-19 09:14 编辑
  1. package www.fuxi.jiaqiang;

  2. import org.apache.commons.beanutils.BeanUtils;


  3. class BeanText{
  4.         private int age;
  5.         private String name;
  6.         public BeanText(int age, String name) {
  7.                 super();
  8.                 this.age = age;
  9.                 this.name = name;
  10.         }
  11.         public int getAge() {
  12.                 return age;
  13.         }
  14.         public void setAge(int age) {
  15.                 this.age = age;
  16.         }
  17.         public String getName() {
  18.                 return name;
  19.         }
  20.         public void setName(String name) {
  21.                 this.name = name;
  22.         }
  23.         
  24. }
  25. public class BeanUtilDemo {
  26.         public static void main(String[] args)throws Exception {
  27.                 BeanText t=new BeanText(23,"java");
  28.                 BeanUtils.setProperty(t, "name", "zhangsan");
  29.                 //BeanUtils.setProperty(t, "age", "22");
  30.                
  31.                 //System.out.println("age="+BeanUtils.getProperty(t, "age"));
  32.                 System.out.println("Name="+BeanUtils.getProperty(t, "name"));
  33.         }

  34. }
复制代码
提示错误信息:

Exception in thread "main" java.lang.reflect.InvocationTargetException: Cannot set name
        at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1019)
        at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:456)
        at www.fuxi.jiaqiang.BeanUtilDemo.main(BeanUtilDemo.java:31)
Caused by: java.lang.NoSuchMethodException: Property 'name' has no setter method in class 'class www.fuxi.jiaqiang.BeanText'
        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



   我已经把两个工具包(commons-beanutils.jar和commons-logging.jar)已经导入,并且get和set都是自动生成的,为什么会提示不能set。


评分

参与人数 1技术分 +1 收起 理由
李江 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
  1. package edu.ytu.demo;

  2. public class BeanText{
  3.     private int age;
  4.     private String name;
  5.     public BeanText(int age, String name) {
  6.             super();
  7.             this.age = age;
  8.             this.name = name;
  9.     }
  10.     public int getAge() {
  11.             return age;
  12.     }
  13.     public void setAge(int age) {
  14.             this.age = age;
  15.     }
  16.     public String getName() {
  17.             return name;
  18.     }
  19.     public void setName(String name) {
  20.             this.name = name;
  21.     }
  22.    
  23. }





  24. package edu.ytu.demo;
  25. import org.apache.commons.beanutils.BeanUtils;

  26. public class BeanUtilDemo {
  27.     public static void main(String[] args)throws Exception {
  28.             BeanText t=new BeanText(23,"java");
  29.             BeanUtils.setProperty(t, "name", "zhangsan");
  30.             BeanUtils.setProperty(t, "age", "22");
  31.            
  32.             System.out.println("age="+BeanUtils.getProperty(t, "age"));
  33.             System.out.println("Name="+BeanUtils.getProperty(t, "name"));
  34.     }

  35. }
复制代码
做了一点修改,将两个类分开放在两个文件中声明为public权限,按照你的做法BeanText是默认权限,BeanUtils框架根本无法访问你的Beantext类

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼上的哥们正解! class前边什么都不加表示的是默认权限,加上public就是公共的,
当前类、同一包内类、子孙类、或者其他包中的类都能访问到。默认权限介于private和
public之间,所以反射无法找到比自己权限小的类中的成员变量。
回复 使用道具 举报
杨卫腾 发表于 2013-10-18 22:12
楼上的哥们正解! class前边什么都不加表示的是默认权限,加上public就是公共的,
当前类、同一包内类、子 ...

加上public后,错误提示也一样的
回复 使用道具 举报
本帖最后由 杨卫腾 于 2013-10-18 22:56 编辑
杨增坤 发表于 2013-10-18 22:38
加上public后,错误提示也一样的

这个类要单独存在的,就算你在这个BeanText类前边加上public也是不行的,这个我试过了。因为在一个文件中只能有一个public类并且此public类必须与文件名相同的,其他类就算是
写上public在编译的时候也会是默认权限的。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

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