Domanda

Ho osservatori degli eventi che tutti osservano lo stesso evento, quindi ho una superclasse astratta che osserva tale evento e poi il / implementa la funzionalità specifiche override sottoclasse.

Il problema di questo è che non osserva l'evento se non ho messo il metodo di evento osservatore nella sottoclasse (che sconfigge lo scopo del mio disegno).

posso certamente farlo in questo modo, ma voglio scrivere il meno codice possibile.

dovrebbe funzionare in questo modo (sto facendo qualcosa che non va)?

Se non dovrebbe funzionare in questo modo, allora posso scrivere un produttore per una cosa e poi un intercettore. Ho pensato che il mio primo approccio era più semplice e più probabilità di essere utilizzato correttamente da altri sviluppatori.

esempio di codice:

SuperClass:

public abstract class AbstractFileWriter
{
  public void onReady(@Observes ReadyEvent readyEvent)
  {
    try
    {
      handleReady(readyEvent, ...);
    }
  }

  protected abstract handleReady(ReadyEvent readyEvent, otherParameters go here);
}

SubClass

public class XmlWriter extends AbstractFileWriter
{
   protected handleReady( ... )
   { ... }
}

Se scrivo in questo modo, non viene mai richiamato handleReady (e nessuno dei due è onReady per questo); tuttavia, se scrivo con il metodo osservatore all'interno della sottoclasse, funziona come previsto. Voglio scrivere in questo modo in quanto v'è molto meno codice avrei dovuto scrivere e un po 'meno di astrazione che dovrebbe rendere più facile da capire.

Walter

È stato utile?

Soluzione 2

ho scritto un decoratore come ho detto sopra. Questo fa essenzialmente la stessa cosa, solo scritto in modo leggermente diverso.

Walter

Altri suggerimenti

In entrambi i dichiarare il metodo rilevante nella superclasse di essere astratto o fa chiamare un metodo astratto "dettaglio" che ogni implementa sottoclasse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top