Ho bisogno di dotare la mia classe con la clonazione polimorfica (copia completa), vale a dire ho bisogno di qualcosa di simile al lavoro:Il metodo Java clone() è l'unico modo per ottenere la clonazione polimorfica?
SuperType original = new SubType();
SuperType copy = original.clone();
dove original.clone()
può essere sostituito da qualsiasi meccanismo per creare una copia profonda, e il tipo effettivo di copy
deve essere SubType
, perché original
è anche SubType
.
Il metodo clone()
e l'interfaccia Cloneable
sono l'unico modo per ottenere questo risultato? Metodi di fabbrica e costruttori di copie non possono essere utilizzati, poiché la classe effettiva è nota solo in fase di esecuzione, giusto? Esistono altri metodi suggeriti, ad eccezione degli approcci serialize-deserialize, e lo Java deep-cloning library, che è IMHO ancora peggio della magia nera rispetto al metodo clone()
?
Grazie, Petr
Non è possibile creare un costruttore in cui si può passare l'oggetto che si desidera clonare? – Justin
@gangqinlaohu Certo, posso, ma poi avrei bisogno di chiamare 'new SubType (original)' che non posso poiché non so al momento della scrittura del codice se l'originale è in realtà di classe 'SubType', o' SubType2' o 'SubSubType'. – Posa