Sto provando a utilizzare il modello di modello per definire un algoritmo generico in java. Ma il metodo che deve essere sovrascritto, prende un oggetto come input. Questo oggetto può variare a seconda dell'implementazione concreta.
Quindi ho deciso di utilizzare l'ereditarietà nel parametro di input. Sto passando l'oggetto genitore nel metodo sottoposto a override della classe astratta. Nel metodo dominante della classe concreta, l'ho scartato al bambino e ottenuto i dettagli richiesti. Si dice che il downcasting sia un odore di codice. Come posso ottenere questo senza downcasting. O c'è qualche altra soluzione migliore.
Esempio di codice che mostra il problema:
abstract class GenericAlgorithm {
void someMethod(GeneralParameter gp);
}
class ConcreteAlgorithm extends GenericAlgorithm {
@Override
void someMethod(GeneralParameter gp) {
// I can't take a SpecificParameter as argument,
// so I would need to downcast the parameter
SpecificParameter sp = (SpecificParameter) gp;
...
}
}