1

このメソッドを使用して、クラスのHtmlからコードを削除します。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

フィールドはプライベートなので、それらを含むクラス内のコードからのみアクセスでき、スーパークラスからはアクセスできません。

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 に答える
1

f.setAccessible(true); を呼び出す必要があるかもしれません。

于 2013-07-11T13:31:50.023 に答える