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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kira 中级黑马   /  2014-2-26 12:38  /  1313 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同样还是关于javaBean的 在使用Beanutils工具包中产生了问题
  1. import java.beans.IntrospectionException;
  2. import java.beans.PropertyDescriptor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;

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

  6. public class IntroDemo {

  7.        
  8.         public static void main(String[] args) throws Exception{
  9.                 // TODO Auto-generated method stub
  10.                 Reflectpot rfp1 = new Reflectpot(3,5);
  11.                 //这里获得x的属性 直接是获取不到的 我们可以先定义属性名
  12.                 String proName ="x";
  13.                 // 这里有个思路是 x ---X 看第二个是否小写 转换完之后---getX---通过反射的方式method getX
  14.                 //这里引入javaBean的一个类是 PropertyDescriptor 属性描述
  15.                  Object renVal = getPro(rfp1, proName);
  16.                 System.out.println(renVal);//取出值
  17.                 Object val =7;
  18.                 PropertyDescriptor pd2 = new PropertyDescriptor(proName,rfp1.getClass());
  19.                
  20.                 setPro(rfp1, pd2, val);
  21.                 System.out.println(BeanUtils.getProperty(rfp1, "x"));//第一个选择对象 第二个选择值
  22.                
  23.                 System.out.println(rfp1.getX());//打印我们刚才修改的
  24.         }
  25.         private static void setPro(Object rfp1, PropertyDescriptor pd2,
  26.                         Object val) throws IllegalAccessException,
  27.                         InvocationTargetException {
  28.                 Method setX =  pd2.getWriteMethod();//得到X的属性的写方法
  29. //                有了这个方法 我们就可以用invoke在对象身上调用
  30.                 setX.invoke(rfp1,val);//这里就不需要返回值
  31.         }
  32.        
  33.        
  34.         private static Object getPro(Object rfp1, String proName)
  35.                         throws IntrospectionException, IllegalAccessException,
  36.                         InvocationTargetException {
  37.                 PropertyDescriptor pd = new PropertyDescriptor(proName,rfp1.getClass());
  38.                 //得到javaBean的属性 我们就能得到javaBean的get 和set方法
  39.                 Method getX =  pd.getReadMethod();//得到X的属性的读方法
  40. //                有了这个方法 我们就可以用invoke在对象身上调用
  41.                          getX.invoke(rfp1);
  42.                 return pd;
  43.         }


  44. }
  45. class Reflectpot{//创建一个类 生成set和getX Y方法
  46.         public int x;
  47.         public int y;
  48. public int getX() {
  49.                 return x;
  50.         }
  51.         public void setX(int x) {
  52.                 this.x = x;
  53.         }
  54.         public int getY() {
  55.                 return y;
  56.         }
  57.         public void setY(int y) {
  58.                 this.y = y;
  59.         }

  60. public String s1 ="ball";//新加两个成员变量
  61. public String s2 ="car";
  62. Reflectpot(int x ,int y){
  63. super();
  64. this.x=x;
  65. this.y=y;

  66.                 }
  67. public String toString(){
  68.        
  69.         return s1+"::"+s2;
  70.         }

  71. }
复制代码

这个还是我原来的内省javaBean代码
配置buildpath也没有问题 配置文件我也有了


运行的时候 却报了一个
Exception in thread "main" java.lang.NoSuchMethodException: Property 'x' has no getter method
找不到getX方法的异常 可是我明明都有getX啊 怎么会找不到 求助大神

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
BeanUtils这个工具类不在你当前包下,不能访问到非public的类Reflectpot
解决方法:将Reflectpot类公有。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
e.c 发表于 2014-2-26 14:09
BeanUtils这个工具类不在你当前包下,不能访问到非public的类Reflectpot
解决方法:将Reflectpot类公有。 ...

不对啊 大神 公有了之后 主方法就找不到了:L

点评

好 我还是单独放吧  发表于 2014-2-26 16:18
e.c
执行的时候要执行java IntroDemo(如果是eclipse的话可以右击run configur...里面可设置运行哪个文件) 或者 将Reflectpot单独放到一个文件里  发表于 2014-2-26 16:15
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马