Penso che quanto segue non possa essere fatto in Java. Ma sarei felice di imparare come implementare qualcosa che gli somigli.implementazione di interfacce dopo il fatto
Supponiamo di avere una classe C, che è già utilizzata nel codice compilato. (Non possiamo né cambiare quel codice né la definizione originale di C).
Supponiamo inoltre che ci sia un codice interessante che potrebbe essere riutilizzato, se solo C implementasse l'interfaccia I. È, infatti, più o meno banale derivare D che è solo C + l'implementazione dei metodi di interfaccia.
Eppure, sembra che ci sia alcun modo, una volta che ho una C, per dire: io voglio che tu sia un D, vale a dire, un C attuazione I.
(osservazione laterale: Credo che il cast (D) c, dove c è il tipo di runtime C, l'unica differenza rispetto a C sono metodi aggiunti, che dovrebbe essere sicuro, non dovrebbe?)
Come si può aggirare questo calamità?
(Conosco il modello di progettazione di fabbrica, ma questa non è una soluzione, a quanto pare.Perché, una volta che riusciamo a creare D in tutti i luoghi in cui erano precedentemente C, qualcun altro trova un'altra interfaccia J utile e deriva E estende C implementa J. Ma E e D sono incompatibili, dal momento che entrambi aggiungono un diverso insieme di metodi a C. Quindi, mentre possiamo sempre passare una E dove ci si aspetta una C, non possiamo passare una E dove ci si aspetta una D. Piuttosto, ora, avremmo bisogno di una nuova classe F estende le implementazioni C I, J.)
Questo sembra abbastanza complessa, ma io sicuramente fare un tentativo. Puoi dire qualcosa sul costo di runtime, cioè mi sembra di aver bisogno di un'istanza del gestore di richiamo extra per oggetto. – Ingo
Il metodo delegato sarebbe molto più semplice, questo aggiunge complessità senza alcun beneficio per questo particolare problema. – Robin
pensavo che fosse necessaria un'altra soluzione oltre all'applicazione del modello dell'adattatore specificamente per una soluzione runtime. forse un'errata interpretazione – MahdeTo