Konstruktor für abstrakte Klasse kopieren

8

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%     
HAL9000 30.12.2013, 17:46
quelle

1 Antwort

9
  

Ich kann keinen Kopierkonstruktor in AClass erstellen, weil es eine abstrakte Klasse ist und ich den Namen der Klasse nicht kennen kann, die von AClass

erben wird

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:

%Vor%

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:

%Vor%

Hinweis: Dieser Entwurf ist bekannt als das Prototypmuster , manchmal formlos als " virtueller Konstruktor ".

    
dasblinkenlight 30.12.2013, 17:49
quelle