我使用此方法从类中的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
。
- 为什么会发生这种情况,以及
- 我该怎么解决这个问题
我猜字段是私有的,所以只能从包含字段的类内的代码访问,而不能从超类访问。
您必须通过对它们调用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);