Ansicht
Dokumentation

CL_ISHMED_WEAK_OBJ_COLLECTION - Kollektion mit Schwachem Bezug zu den Inhaltsobjekten

CL_ISHMED_WEAK_OBJ_COLLECTION - Kollektion mit Schwachem Bezug zu den Inhaltsobjekten

General Data in Customer Master   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Diese Klasse implementiert eine Objekt-Kollektion, die einen schwachen Bezug zu den in der Kollektion enthaltenen Objekten besitzt. Ein Schwacher Bezug (weak reference) bedeutet, dass ein Objekt zwar in der Kollektion bekannt ist, aber nur so lange in der Kollektion enthalten bleibt, wie auch andere Programmteile einen Bezug zum jeweiligen Objekt besitzen.

Diese als Cache von Objekt-Instanzen genutzt werden, mit dem sicherstellt wird, dass jedes Objekt höchstens ein mal existiert und automatisch vom Garbage Collector freigegeben wird, sobald es ausserhalb der Kollektion nicht mehr verwendet wird. Die Freigabe von ausserhalb der Kollektion nicht mehr bekannten Objekte erfolgt durch den Garbage Collector. Es ist zu beachten dass der Garbage Collector nur den Speicher freigibt und keine zusätzlichen Methoden wie "free" auf Seiten des Objekts aufruft. Wenn ein Objekt eigene Freigabeoperationen (z.B. Freigebgen von Datenbanksperren oder Client-Controls) durchführen muss, dann muss sein Lebenszyklus vom Anwendungsentwickler selbst verwaltet werden. Ein solches Objekt sollte nichtüber diese Kollektion verwaltet werden.

Es können beliebige Objekte, die das Interface if_ishmed_collection_object implementieren, in die Kollektion aufgenommen werden. Durch die Natur dieser Kollektion ist nicht sichergestellt, dass eine Instanz, die in die Kollektion eingestellt wurde, auch wieder aus der Kollektion erhalten werden kann. So lange aber andere Programmteile ein Objekt verwenden, das innerhalb der Kollektion verwaltet wird, wird dieses Objekt auch von der Kollektion wieder zurückgeliefert.

Durch die Natur der Kollektion kann sich die Größe der Kollektion ändern, nachdem der Garbage Collector gelaufen ist. Dies bedeutet z. B. dass zwei auf einander folgende Aufrufe von COUNT ein unterschiedliches Ergebnis liefern können. Es wird deshalb von Index-basierten Zugriffen auf die Kollektion abgeraten. Stattdessen werden die folgenden zwei Zugriffsmuster empfohlen:

1. Schlüsselzugriff: Zugriff dem Schlüssel des jeweiligen Objekts. Wenn der Schlüssel eines Objekts, das innerhalb der Kollektion vorhanden sein könnte, bekannt ist, sollte direkt über GET_REFERENCE( key = ... ) auf das Objekt zugegriffen werden. Falls das gesuchte Objekt existiert, wird es zurückgeliefert. Falls das gewünschte Objekt niemals existiert hat, oder zwar existiert hat, aber inzwischen nirgendwo mehr verwendet wird und deshalb freigegeben wurde, wird stattdessen eine initiale Referenz zurückgeliefert.

2. Iterator: Es kann normal über die Kollektion iteriert werden (siehe Methode GET_ITERATÖR_EXT). Der Iterator stellt sicher, dass die Iteration sauber funktioniert, dass der Garbage-Collector die Iteration nicht beeinflusst und dass keine initialen Referenzen vom Iterator zurückgeliefert werden. Die REMOVE-Methode des Iterators kann problemlos während der Iteration verwendet werden. Während der Iteration darf die Kollektion nicht durch die Kollektions-Methoden ADD, CLEAR oder REMOVE verändert werden.

Beziehungen

Beispiel

data lr_collection type ref to cl_ishmed_weak_obj_collection.
data lr_object type ref to if_ishmed_collection_object.
data l_size type i.
data lr_result type ref to if_ishmed_collection_object.

lr_object = ???. ,,,,,,,,,,"objekt erzeugen, dass in die Kollektion gestellt werden soll

create object lr_collection. ,,,,,,"Kollektion erzeugen

lr_collection->add( reference = lr_object ).,,"kollekt erzeugen.

l_size = lr_collection->size( ).,,,,,,"Größe = 1

lr_result = lr_collection->get_reference( idx = lr_result ). "lr_result = lr_object

clear lr_object.,,,,,,,,,,"externe Referenz freigeben

".... ,,,,,,,,,,,,,,Etwas tun; irgendwann läuft der Garbage Collector

,,,,,,,,,,,,,,"dadurch wird das Objekt, das ausserhalb nicht mehr bekannt ist,

,,,,,,,,,,,,,,"auch innerhalb der Collection freigegeben.

l_size = lr_collection->size( ).,,,,,,"Größe = 0

lr_result = lr_collection->get_reference( idx = lr_result ). "lr_result = {initial}; das Objekt wurde freigegeben

Hinweise

Weiterführende Informationen






rdisp/max_wprun_time - Maximum work process run time   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4792 Date: 20240329 Time: 143206     sap01-206 ( 101 ms )