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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jeik 中级黑马   /  2014-11-2 13:23  /  3229 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
public class ReflectBeanUtils {
    public static void main(String[] args) {
    Dog dog=new Dog();
      try {
           BeanUtils.setProperty(dog, "name", "阿忠");
           Object o=BeanUtils.getProperty(dog, "name");
           System.out.println(o.toString());
       } catch (Exception e) {
           e.printStackTrace();
         throw new RuntimeException(e);
      }
  }
}

报错:说是我的javaBean中没有setName方法: 但是我的却是有的。
java.lang.reflect.InvocationTargetException: Cannot set name
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1013)
at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:454)
at cn.reflect.ReflectBeanUtils.main(ReflectBeanUtils.java:15)
Caused by: java.lang.NoSuchMethodException: Property 'name' has no setter method in class 'class cn.reflect.Dog'

最佳答案

查看完整内容

应该是因为你的class 不是public属性的,你是不是把Dog类写到内部的, 你另外开个单独类写Dog就可以了 一定要是public class Dog

14 个回复

倒序浏览
应该是因为你的class  不是public属性的,你是不是把Dog类写到内部的,
你另外开个单独类写Dog就可以了
一定要是public class Dog
回复 使用道具 举报
补充图片
回复 使用道具 举报
这是说JavaBean类必须是public吗?
回复 使用道具 举报
Jeik 发表于 2014-11-2 16:59
这是说JavaBean类必须是public吗?

不是这个意思, 你是用别人开发的工具,应该是工具类的一些规定,具体的为什么要public的 只有去阅读他的源码了。
回复 使用道具 举报
Jeik 发表于 2014-11-2 16:59
这是说JavaBean类必须是public吗?

如果类不声明为public的 跨包是没办法访问的,
回复 使用道具 举报
Jeik 中级黑马 2014-11-2 18:16:24
7#
不是这个问题 我就定义成内部类,通过外部类引用构建javaBean对象,还是不能访问。
回复 使用道具 举报
Jeik 发表于 2014-11-2 18:16
不是这个问题 我就定义成内部类,通过外部类引用构建javaBean对象,还是不能访问。 ...

你还是没懂我的意思, BeanUtils工具要求你的类必须是public公有的,因为它是反射调用,他不知道你是不是在同包,所以要求必须是公有属性,如果不是公有属性,则无法调用
回复 使用道具 举报
Jeik 发表于 2014-11-2 18:16
不是这个问题 我就定义成内部类,通过外部类引用构建javaBean对象,还是不能访问。 ...

反正你就记住要用beanUtils这个工具类,必须要求JavaBean对象是公有属性的,否则你就不要用了
回复 使用道具 举报
Jeik 中级黑马 2014-11-2 19:52:16
10#
楼上的哥们 我已近知道什么了!是第三方jar的关系。通过BeanUtils最终会调用到如下的一个方法:
  // If the class is public, we are done
        if (Modifier.isPublic(clazz.getModifiers())) {
            if (!sameClass && !Modifier.isPublic(method.getDeclaringClass().getModifiers())) {
                setMethodAccessible(method); // Default access superclass workaround
            }
            return (method);
        }
这就是原因。当我们的javaBean不是public的时候,肯定找不到method,所以调用它的上层就报错,说找不到setter方法。
回复 使用道具 举报
Jeik 发表于 2014-11-2 19:52
楼上的哥们 我已近知道什么了!是第三方jar的关系。通过BeanUtils最终会调用到如下的一个方法:
  // If th ...

我不早给你说了,是工具类要求的么,
回复 使用道具 举报
Jeik 发表于 2014-11-2 19:52
楼上的哥们 我已近知道什么了!是第三方jar的关系。通过BeanUtils最终会调用到如下的一个方法:
  // If th ...

说这么多,你还是舍不得把5个B给我?
回复 使用道具 举报
Jeik 中级黑马 2014-11-2 22:48:29
13#
刚进来我的黑马币已近扣了呀!你想多了。黑马币是我给的么?不会弄 昨天才弄了博客。
回复 使用道具 举报
Jeik 发表于 2014-11-2 22:48
刚进来我的黑马币已近扣了呀!你想多了。黑马币是我给的么?不会弄 昨天才弄了博客。 ...

智商捉急啊
回复 使用道具 举报
顶。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马