2011-04-12 106 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