У меня есть этот класс:
public abstract class AbstractIncomingCall {
/*
class properties
*/
public void changeStatus(/*some parameters*/){
//store parameters in class properties
isValid();
}
protected abstract boolean isValid();
}
... который расширен этим классом:
public class IncomingCallImpl extends AbstractIncomingCall{
//I override the parent's method
public void changeStatus(/*same parameters as parent's method*/) {
super.changeStatus(/*same parameters as parent's method*/);
//do something interesting
}
protected boolean isValid() throws StatusChangeNotOccurredException {
//implement my validation algorithm
}
Чего я хотел бы добиться, так это убедиться, что всякий раз, когда changeStatus (/ * некоторые параметры * /) вызывается, вызывается метод isValid (); обратите внимание, что метод isValid () реализован только в конкретном классе, а также использует свойства класса, унаследованные от родительского класса.
Есть ли способ, которым я могу следовать, чтобы гарантировать, что isValid () вызывается иначе, чем вызов super?
Мне очень не нравится тот факт, что я должен передавать параметры повсюду, я думаю, что я иду совершенно в неправильном направлении, и есть более чистый способ добиться этого.
То, что я хотел бы сохранить в своем коде, это «логика вызова isValid ()» в абстрактном классе, потому что каждый вызов должен быть проверен, и я не могу рассчитывать на то, что я запомню это в будущем: P
Заранее спасибо:]