Instanzen kopieren, ohne Referencen zu kopieren

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Instanzen kopieren, ohne Referencen zu kopieren

Beitrag von markudo (ForumUser / 5 / 0 / 0 ) »
guten Morgen,

gibt es eine Möglichkeit, ein Instanz-Objekt 1 in ein Instanz-Objekt 2 zu kopieren, ohne die Referenz zu kopieren?

obj1 = obj2 --> hier wird ja die Referenz kopiert, eine Änderung in obj1 ändert damit auch obj2

ich suche aber eine Möglichkeit á la move-corresponding obj2 to obj1, in der nur die Variablen, ... kopiert werden.

danke & gruß aus Graz,

Markus

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo Markus,

wenn du so etwas wie die clone Funktion in Java meinst, dann habe ich die auch noch nicht gefunden. Daher schon Mal Danke für die Frage (und vielen Dank für eine Antwort).

Wenn ich das Problem hätte, würde ich an der Ecke RTTI mit der Klasse CL_ABAP_TYPEDESCR und deren Subklassen beginnen. Damit dürfte das zu kopierende Objekt schon so ziemlich die Hosen runterlassen. Wenn du an die Attribute und deren Inhalte kommst, kannst du die mittels Move oder '=' in das neue Objekt kopieren.

Soweit mein Ansatz / meine Idee

Grüße

Udo

EDIT: Leider zu kurz gedacht. Ich habe glatt die Sichtbarkeit von Attributen vergessen....

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo Markus,

falls es dich noch interessiert. Mir hat das Thema keine Ruhe gelassen und Google hat geholfen. Also: Es ex. ein Interface "if_os_clone" mit der Methode "clone". Dieses Interface muss in der Klasse deiner Objekt implementiert sein. Die Implementierung der Methode sieht so aus
"SYSTEM-CALL OBJMGR CLONE me TO result".
Ich habe noch schnell ein Beispiel auf meinem 4.6D getippert:

Code: Alles auswählen.

REPORT  zclone.

CLASS zcl_clone DEFINITION.
  PUBLIC SECTION.

    INTERFACES: if_os_clone.

    DATA: m_attribute TYPE i.
ENDCLASS.

CLASS zcl_clone IMPLEMENTATION.

  METHOD if_os_clone~clone.
    SYSTEM-CALL OBJMGR CLONE me TO result.
  ENDMETHOD.

ENDCLASS.

DATA: l_object1 TYPE REF TO zcl_clone.
DATA: l_object2 TYPE REF TO zcl_clone.


START-OF-SELECTION.

* Anlage Objekt 1 mit Wertzuweisung.
  CREATE OBJECT l_object1.
  l_object1->m_attribute = 123456.

* Kopieren Objekt 1 in Objekt 2 und Test auf Objekt 2
  l_object2 ?= l_object1->if_os_clone~clone( ).
  WRITE: / 'Attribut Objekt 2: ', l_object2->m_attribute.

* Objekt 2 ändern und Objekt 1 ausgeben um zu sehen,
* ob es unabhängige Kopien voneinander sind.
  l_object2->m_attribute = 654321.
  WRITE: / 'Attribut Objekt 1: ', l_object1->m_attribute.
Grüße

Udo

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

genausowas habe ich selbst implementiert.

Ich mache eine "manuelle" Constructor-Methode, die alle Attribute als IMPORT-Parameter kennt. Dazu gibt es dann noch eine "COPY"-Methode.
Die erzeugt ein Objekt vom gleichen Typ und versorgt beim Anlegen alle Parameter mit den eigenen Attibuten. Rückgabe ist die Referenz auf die Kopie --> fertig

Gruß
babap

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo babap,

das funktioniert aber nur, wenn du die Berechtigung für alle Attribute hast. Beispiel:

class a
private attribute pa.

class b inheriting class a.

Versuch jetzt mal den Zugriff von Klasse b auf das Attribut pa in der Superklasse...

Grüße

uh

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

ich meinte, daß man in der Klasse, die kopiert werden soll, gleich eine Methode anlegt, die das Kopieren macht.

Der "sagt" man einfach: "bitte kopiere dich selbst und gib mir den 'Zeiger'".

Code: Alles auswählen.

NEWINSTANCE = EXISTINGINSTANCE->copy( ).
Wie die Instanz das dann mach ist für den aussenstehenden "Aufrufer" egal.

Und wenn die Constructor-Methode alle Attribute als Parameter übergeben bekommt, hat man innerhalb der Copy-Methode auch keine Probleme mit eingeschränkten Attributen.

So habe ich es jedenfalls implementiert.

Gruß
babap

Seite 1 von 1

Vergleichbare Themen

3
Antw.
4050
Views
Auftragsart kopieren
von SAPAlex » 23.04.2008 20:35 • Verfasst in Sales and Distribution
0
Antw.
1370
Views
0
Antw.
2361
Views
Tabelleninhalt kopieren
von Diesel83 » 19.03.2011 12:01 • Verfasst in ABAP® für Anfänger
2
Antw.
2672
Views
Schema kopieren
von Goofy » 05.03.2007 07:14 • Verfasst in Human Resources
5
Antw.
7994
Views
Programm kopieren
von pohlmann-schwarza » 11.09.2008 09:47 • Verfasst in ABAP Objects®

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

DIN Norm Klassifizierung
vor 4 Tagen von Radinator 1 / 421
Anwenderdoku in SAP
vor 6 Tagen von ewx 10 / 1239

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.