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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 格子、 高级黑马   /  2014-7-16 17:28  /  1020 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 格子、 于 2014-7-16 19:19 编辑

今天看到了高新技术的内省,使用BeanUtils工具包的方法,就是set也get不了属性,我都按照正确的方法导入了,求大神解释?求帮助
代码如下:
  1. package com.itheima.day02;



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

  4. public class Test {

  5.         public static void main(String[] args) throws Exception {
  6.                 // TODO Auto-generated method stub
  7.                 //ReflectPoint1 pt1 = new ReflectPoint1(3, 5);
  8.                 Person p = new Person("gezi");
  9.         //BeanUtils.setProperty(p, "name", "4");
  10.         PropertyUtils.setProperty(p, "name", "heima");
  11.         }

  12. }
  13. class Person
  14. {
  15.         private String name;
  16.         public Person(String name)
  17.         {
  18.                 this.name=name;
  19.         }
  20.         public String getName() {
  21.                 return name;
  22.         }
  23.         public void setName(String name) {
  24.                 this.name = name;
  25.         }
  26.         
  27. }
复制代码
错误如下,两种方式都无法操作。。。
  1. Exception in thread "main" java.lang.NoSuchMethodException: Property 'name' has no setter method in class 'class com.itheima.day02.Person'
  2.         at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2084)
  3.         at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1903)
  4.         at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:2010)
  5.         at org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:896)
  6.         at com.itheima.day02.Test.main(Test.java:15)
复制代码





6 个回复

倒序浏览
关于内省我只记它和反射的区别,还有就是简单的获取变量方法,后面的都木有看
package day_7_16;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

//复制文件夹
public class JavaBeanDemo {
        public static void main(String[] args) throws Exception {
              /*  // TODO Auto-generated method stub
                //ReflectPoint1 pt1 = new ReflectPoint1(3, 5);
                Person p = new Person("gezi");
        //BeanUtils.setProperty(p, "name", "4");
        PropertyUtils.setProperty(p, "name", "heima");
        }*/
//                明确获取的是name属性变量
                String  propertyName = "name";
                Person p = new Person("zhangxiaoxiang");
                        //                获取类里面的属性名的方法,javaBean里面的方法
                PropertyDescriptor pd = new PropertyDescriptor(propertyName, p.getClass());
//                获取get方法
                Method methodName=pd.getReadMethod();
//                反射里面用invoke调用这个方法,得到传入的值
                Object retVal = methodName.invoke(p);
//        输出
                System.out.println(retVal);
        }
}
class Person
{
        private String name;
        public Person(String name)
        {
                this.name=name;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
}
回复 使用道具 举报
人心如水 发表于 2014-7-16 18:08
关于内省我只记它和反射的区别,还有就是简单的获取变量方法,后面的都木有看
package day_7_16;
import ja ...

好吧,就是BeanUtils这个工具类使用出点问题。。。居然报错检测不到set或者get方法,我就奇了怪了
回复 使用道具 举报
我来救你吧     你把Person类变为一个新建的public Person类中就ok了    貌似工具只认public类的
回复 使用道具 举报
Mr.Hao 发表于 2014-7-16 18:58
我来救你吧     你把Person类变为一个新建的public Person类中就ok了    貌似工具只认public类的 ...

终于改好了。。。一直没注意过这个问题,万分感谢啊!!!
回复 使用道具 举报
格子、 发表于 2014-7-16 19:19
终于改好了。。。一直没注意过这个问题,万分感谢啊!!!

我也是稀里糊涂的遇到了这个问题,后来实在找不出解决办法了就这样试出来的,以后在遇到了肯定知道怎么解决
回复 使用道具 举报
Mr.Hao 发表于 2014-7-16 19:35
我也是稀里糊涂的遇到了这个问题,后来实在找不出解决办法了就这样试出来的,以后在遇到了肯定知道怎么解 ...

好吧,我是怎么也没想到会是这么个情况。。。这次算是涨姿势了,以后注意权限问题!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马