抽象クラスがあります:Javaの抽象クラスからプライベートフィールドを変更するにはどうすればよいですか?
public abstract class AbstractAny {
private long period;
public void doSomething() {
// blah blah blah
period = someHardcodedValue;
// blah blah blah
}
}
私は抽象クラスのソースを変更するが、フィールド期間が設定されている方法についていくつかの柔軟性を追加する必要はしたくありません。フィールド期間の値をオーバーライドされたメソッドから変更することは可能ですか?例えば同様:
public class ConcreteSome extends AbstractAny{
@Override
public void doSomething() {
try {
Field p = super.getClass().getDeclaredField("period");
p.setAccessible(true);
p.setLong(this, 10L);
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
私はこのコードsuper.getClass().getDeclaredField("period")
を実行しようとするあなたはsuper.getClass()
、スーパークラスを取得するためにgetClass().getSuperclass()
を必要はありませんjava.lang.NoSuchFieldException: period
修正しました。ありがとうございます –