추상 클래스가 있습니다 :Java에서 abstract 클래스의 private 필드를 변경하는 방법?
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")
가 java.lang.NoSuchFieldException: period
고쳐 주셔서 감사합니다. –