Ho un problema concettuale con una corretta implementazione del codice che sembra richiedere l'ereditarietà multipla, che non sarebbe un problema in molte lingue OO, ma poiché il progetto è per Android, non esiste nulla come multiplo extends.
Ho un sacco di attività, derivata da diverse classi base, come semplice Activity, TabActivity, ListActivity, ExpandableListActivity, ecc Inoltre ho alcuni frammenti di codice cui devo posto in onStart, onStop, onSaveInstanceState, onRestoreInstanceStatee altri gestori di eventi standard in tutte le attività.
Se ho una singola classe base per tutte le attività, inserisco il codice in una speciale classe derivata intermedia e quindi creo tutte le attività che lo estendono. Sfortunatamente, questo non è il caso, perché ci sono più classi di base. Ma mettere le stesse porzioni di codice in più classi intermedie non è una strada da percorrere, imho.
Un altro approccio potrebbe essere quello di creare un oggetto helper e delegare tutte le chiamate degli eventi sopra citati all'helper. Tuttavia, è necessario includere l'oggetto helper e ridefinire tutti i gestori in tutte le classi intermedie. Quindi non c'è molta differenza nel primo approccio qui - ancora molti duplicati di codice.
Se si verificasse una situazione simile in Windows, sottoclasserei la classe base (qualcosa che "corrisponde" alla Activityclasse in Android) e intrappolerei lì i messaggi appropriati (in un unico posto).
Cosa si può fare in Java / Android per questo? So che ci sono strumenti interessanti come la strumentazione Java ( con alcuni esempi reali ), ma non sono un guru Java e non sono sicuro se valga la pena provare in questo caso specifico.
Se ho perso alcune altre soluzioni decenti, per favore, menzionale.
AGGIORNARE:
Per coloro che potrebbero essere interessati a risolvere lo stesso problema in Android, ho trovato una soluzione semplice. Esiste la classe Application , che fornisce, tra l'altro, l'interfaccia ActivityLifecycleCallbacks . Fa esattamente ciò di cui ho bisogno permettendoci di intercettare e aggiungere un valore in eventi importanti per tutte le attività. L'unico inconveniente di questo metodo è che è disponibile a partire dal livello API 14, che in molti casi non è sufficiente (il supporto per il livello API 10 è un requisito tipico oggi).
decordator pattern. Questa è l'ultima risorsa, che in realtà dimostra ciò che preferirei evitare: la duplicazione del codice. Accetterò la tua risposta, se non vi saranno altre idee interessanti. Posso forse usare i generici per generalizzare il codice degli "intermedi"?