2013-07-11 71 views
1

我用這個方法來從我String S IN類中刪除Html代碼:反思inhertited類

public void filterStrings() { 

    Field[] fields = this.getClass().getDeclaredFields(); 

    if (fields == null) { 
     return; 
    } 

    for (Field f : fields) { 

     if (f.getType() == java.lang.String.class) { 

      try { 

       String value = (String) f.get(this); 

       f.set(this, methodToRemoveHtml(value)); 

      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

} 

工作正常。由於我發現自己在我使用的很多類中都使用了這種方法,因此我想讓所有這些類都從BaseClass繼承,並僅在此處實現該方法。 但是當我這樣做,我得到一個:java.lang.IllegalAccessException: access to field not allowed在每一次嘗試。

  1. 這究竟是爲什麼而
  2. 我該如何解決這個問題?
+0

[setAccessible](http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible(boolean)) –

回答

1

我猜這些字段是私人的,所以他們只能從包含它們的類中的代碼訪問,而不是超類。

您必須通過致電setAccessible(true);或讓它們公開或受保護來訪問它們。

for (Field f : fields) { 

     if (f.getType() == java.lang.String.class) { 

      try { 
       f.setAccessible(true); // make field accessible. 
       String value = (String) f.get(this); 
       // ... 
+0

是的,這很有用,非常感謝你。我會在幾分鐘內接受。 – FWeigl

1

可能是你需要調用: f.setAccessible(真);