Ciao amici, ho un quesito:

sto sviluppando una classe astratta padre A che implemente il pattern Template, quindi all'interno di un metodo esegui() riporta la lista di esecuzione di alcuni metodi astratti da implementare nelle classi figlie:

codice:
public final Object esegui() {
  init(x);
  Y y = call(x);
  return elaborate(y);
}
Il concetto è che un oggetti di tipo X viene inizializzato (init), viene avviato (call) e il risultato, l'oggetto di tipo Y viene elaborato (elaborate).

Ora il problema: X e Y sono interfacce, ogni classe derivata da A (la classe che contiene il metodo esegui()) utilizzerà le sue personali classi che implementano X e Y: ciò significa che all'interno della classe B, volendo implementare il metodo init():

codice:
@Override
protected void init(X x) {
  X1 x1 = (X1) x;
  x1.set(...
  x1.get()
}
posta X1 una classe derivata da X, io dovrò ogni volta castare a X1 i riferimenti di X; idem per quanto riguarda le classi derivate da Y!
E questo limita la flessibilità del codice.

Sapete come posso risolvere il problema? Non esiste un pattern che mi permetta di passare da classe padre a classe figlia senza trasformare i tipi delle variabili che passo?


Fatemi sapere se non sono stato chiaro.

Grazie!