Je cette classe:méthode est appelée
public abstract class AbstractIncomingCall {
/*
class properties
*/
public void changeStatus(/*some parameters*/){
//store parameters in class properties
isValid();
}
protected abstract boolean isValid();
}
... qui se prolonge par cette classe:
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
}
Ce que je voudrais réaliser est d'assurer que chaque fois ChangeStatus (/ * certains paramètres * /) sont appelés la méthode isValid() est appelée; Notez que la méthode isValid() est implémentée uniquement dans la classe concrète, elle utilise également les propriétés de classe héritées de la classe parente. Y a-t-il un moyen que je peux suivre pour m'assurer que isValid() est appelé autre que super? Je n'aime pas trop le fait que je doive passer des paramètres tout autour, je pense que je vais complètement dans la mauvaise direction et il y a une manière plus propre d'y parvenir. Ce que je voudrais conserver dans mon code est la logique d'appel "isValid()" dans la classe abstraite, car chaque appel doit être validé et je ne peux pas me souvenir de cela dans le futur: P
Merci d'avance:]
Presque posté la même chose ... c'est un modèle très commun. – Varkhan
La méthode doit toujours être finale (pas seulement si vous ne faites pas confiance aux utilisateurs pour étendre correctement). Template Le modèle de méthode implique que la méthode est finale, c'est le seul moyen de garantir la séquence des appels ... – pgras
"La seule façon de garantir" ressemble beaucoup à des extendeurs méfiants :-) mais oui, je suis d'accord avec vous qu'il est la bonne mise en œuvre – kdgregory