2011-10-13 77 views
1

如何獲取Runtime for Java字段的值?採用這種結構運行時獲取字段值

編輯

ClassPathScanningCandidateComponentProvider scanner = 
new ClassPathScanningCandidateComponentProvider(
        false); 
     for (BeanDefinition bd : scanner 
     .findCandidateComponents("aspectlogging")) 
         { 
      Class myTarget = null; 
       try { 
         myTarget = Class.forName(bd.getBeanClassName()); 
        } 
         catch (ClassNotFoundException e) {...} 
       for (Field f:myTarget.getDeclaredFields()){ 
         try { 
          System.out.println("FIELD: " + f.get(myTarget)); 
          } catch (IllegalArgumentException e) {...} 
           catch (IllegalAccessException e) {...} 
        } } 

我有java.lang.IllegalAccessException
打電話時f.get(myTarget)
其中myTarget是bean的實例在運行時和f得到的是它的場。

當循環運行如下:

System.out.println("FIELD: " + f); 

了字段名稱確定:

FIELD: private java.lang.String aspectlogging.TestableBean.name 
FIELD: private java.lang.String aspectlogging.TestableBean.name 

這是很奇怪的,那價值不能得到。

回答

1

argcalled obj in the Javadoc)是要運行的實例。在你的例子中,實例是bd,所以用f.getInt(bd)來提取一個int字段等等。

+0

aix,請參閱我編輯的帖子,我仍然無法獲得field.value的字段bean哪裏得到了,但是當嘗試獲取值異常拋出。 – sergionni