我使用此方法从类中的 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
。
- 为什么会发生这种情况
- 我该如何解决这个问题?
最佳答案
我猜这些字段是私有(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/