Il y a une classe abstraite:Comment faire pour muter un champ privé de la classe abstraite en Java?
public abstract class AbstractAny {
private long period;
public void doSomething() {
// blah blah blah
period = someHardcodedValue;
// blah blah blah
}
}
Je ne veux pas changer la source de la classe abstraite, mais besoin d'ajouter une certaine flexibilité sur la façon dont la période de terrain est en cours. Est-il possible de changer la valeur de la période de champ d'une méthode redéfinie? Comme par exemple:
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);
}
}
}
Quand j'essaie de lancer ce code super.getClass().getDeclaredField("period")
lancers francs java.lang.NoSuchFieldException: period
Correction, merci –