Ich habe eine abstrakte Klasse namens AClass
. Im selben Paket habe ich AnotherClass
, in dem ich ein ArrayList
von AClass
-Objekten habe. Im Kopierkonstruktor von AnotherClass
muss ich ein Duplikat von AClass
Objekten in ArrayList
erstellen.
Das Problem:
Ich kann keinen Kopierkonstruktor in AClass
erstellen, weil es eine abstrakte Klasse ist und ich den Namen der Klasse, die von AClass
erben wird, nicht kennen kann. Tatsächlich wird in diesem Projekt kein Objekt von dieser Klasse erben, aber dieses Projekt wird von anderen Projekten als eine Bibliothek verwendet, die ein Klassen-Kind von AClass
bereitstellen wird. Gibt es einen Fehler in meinem Design oder gibt es eine Lösung für dieses Problem?
Bearbeiten : Hier ist ein Code:
%Vor%Ich kann keinen Kopierkonstruktor in
erben wirdAClass
erstellen, weil es eine abstrakte Klasse ist und ich den Namen der Klasse nicht kennen kann, die vonAClass
Das ist im Allgemeinen richtig. Da Sie jedoch eine Liste von AClass
haben, müssen Sie den genauen Untertyp nicht kennen: Eine abstrakte Funktion, die eine Kopie erstellt, wäre ausreichend:
Dies ist ähnlich der Funktion clone()
von java.lang.Object
, außer dass alle Unterklassen sie implementieren müssen und der Rückgabetyp AClass
sein muss.
Da jede Unterklasse ihren eigenen Typ kennt, sollte es kein Problem haben, makeCopy()
method zu implementieren. Hier ist, wie dies in Ihrem Code aussehen würde:
Hinweis: Dieser Entwurf ist bekannt als das Prototypmuster , manchmal formlos als " virtueller Konstruktor ".
Tags und Links java constructor abstract-class