1

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

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. 我怎样才能解决这个问题?
4

2 回答 2

1

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

于 2013-07-11T13:31:50.023 回答
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);
                // ...
于 2013-07-11T13:31:20.487 回答