2011-04-12 104 views
1

我想在一个bean设置一个属性,我不能似乎得到BeanUtils的工作的BeanUtils ......问题与阿帕奇

继承人我得到这个问题的一个小例子。

public class Example 
{ 
    public static void main(String[] args) 
    { 
     Example example = new Example(); 
     example.run(); 
    } 
    public void run() 
    { 
     try 
     { 
      Bean bean = new Bean(); 
      BeanUtils.setProperty(bean, "name", "myName"); 
      System.out.println(bean.getName()); 
     } catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
    private class Bean 
    { 
     private String name; 

     public String getName() 
     { 
      return name; 
     } 

     public void setName(String name) 
     { 
      this.name = name; 
     } 
    } 
} 

当我运行此我得到的InvocationTargetException,称“无法设置名称”还当我的属性字符串为“名”,我不明白的错误,但该名称未设置。

任何人都可以指出我正确的方向,我要去哪里错了吗?

回答

3

取消Bean类的私有属性。由于BeanUtils正在使用反射,因此无法访问方法'setName'。你可以正常访问私有内部类的原因是java编译器会做特殊的技巧来允许你访问。但是由于BeanUtils没有使用这些技巧,它不能。

+0

使Bean类成为自己的上层类应该能够工作,对吗? – 2011-04-12 21:08:05

+0

只要它是公开的,或者包被保护,并且和Example类在同一个包中,是的。 – MeBigFatGuy 2011-04-12 21:11:28

+0

没有没有工作,我有bean类公开,并在其早些时候在自己的java文件中......我只是把它制作成我的问题的缩短版本在这里发布,而不是发布大量的不需要的码。 – 2011-04-12 21:36:15