固有类中的反射



我使用此方法从类中的String中删除Html代码:

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. 我该怎么解决这个问题

我猜字段是私有的,所以只能从包含字段的类内的代码访问,而不能从超类访问。

您必须通过对它们调用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);
                // ...

您可能需要调用:f.setAccessible(true);

相关内容

  • 没有找到相关文章

最新更新