java - 继承类中的反射

标签 java inheritance reflection

我使用此方法从类中的 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. 我该如何解决这个问题?

最佳答案

我猜这些字段是私有(private)的,因此只能从包含它们的类内部的代码访问它们,而不能从父类(super class)中访问。

您必须通过对它们调用 setAccessible(true); 或将它们设为公开或 protected 来使它们可访问。

    for (Field f : fields) {

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

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

关于java - 继承类中的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594661/

相关文章:

C++重载函数问题

Python:动态类生成:覆盖成员

c# - 报告查看器 : How to load report as an embeddedresource in another assembly using reflection?

php - 在运行时修改方法/函数

reflection - Dart ,如何使用反射获取方法参数的通用类型?

java - 网页输入返回的对象类型

java - 如何使 java swing JFrame 正确调整大小

java - 在 Grails 中使用 Java 类(具有 Spring/Hibernate 依赖项的整个模块)

java - 转义序列八进制表示法未按预期工作

c++ - ostream 运算符重载 - 继承