Zum Hinzufügen dynamischer Felder zu Objekten.
Einige Sprachen unterstützen direkt dynamische Felder: Jeder kann jederzeit jedem Objekt ein beliebiges Feld hinzufügen.
Dies ist praktisch, wenn Sie Objekten Objekte zuweisen möchten, die für den Objektdesigner nicht vorhersehbar sind.
Java hat kein echtes dynamisches Feld. Wir können es simulieren, indem wir eine Identitätskarte verwenden, um ein Objekt irgendeiner Art von Information zuzuordnen.
WeakHashMap
ist besser für den Zweck; Es ist auch eine Identitätskarte, und es fügt keine zusätzliche starke Referenz auf das Objekt hinzu. Es ist also viel näher am dynamischen Feldkonzept.
Nebenläufigkeit ist das verbleibende Problem. Wenn zwei Threads auf dasselbe dynamische Feld von zwei verschiedenen Objekten zugreifen, sollte es keine Abhängigkeiten zwischen zwei Threads geben. Wir können es durch eine Art von gleichzeitig schwachem hashmap lösen. Die Leistung ist jedoch nicht ideal im Vergleich zum normalen Feldzugriff.
Denken Sie an java.lang.ThreadLocal
und fügen Sie dynamischen Threads ein dynamisches Feld hinzu. und java.lang.ClassValue
, Hinzufügen dynamischer Felder zu Klassen. Sie sind nicht unbedingt notwendig - wir können dasselbe mit gleichzeitig schwachen Karten erreichen. Sie existieren aus Leistungsgründen. JDK kann in Thread / Class "hacken", um Unterstützung hinzuzufügen, um schnelleres Nachschlagen zu erreichen.
Sehen Sie sich die Java-Dokumente an: - )
Eine typische Verwendung dieser Klasse ist ein topologieerhaltender Objektgraph Transformationen wie Serialisierung oder Deep-Copying. Aufführen Solch eine Transformation, ein Programm muss eine "Knotentabelle" beibehalten, die verfolgt alle Objektverweise, die bereits vorhanden waren verarbeitet. Die Knotentabelle darf nicht unterschiedliche Objekte gleichsetzen, auch wenn sie sind zufällig gleich. Eine weitere typische Verwendung dieser Klasse besteht darin, Proxy-Objekte verwalten Zum Beispiel könnte eine Fehlersucheinrichtung wünschen um ein Proxy-Objekt für jedes Objekt in dem Programm zu erhalten debuggte.
Nebenbei bemerkt: es ist seit Version 1.4 verfügbar, nicht Java 5 oder 6 ...
Wenn Sie veränderbare Objekte serialisieren, möchten Sie die Objekte, die Sie serialisiert haben, und ihre Referenz-ID verfolgen. Sie können die Gleichheit nicht verwenden, da Sie nicht davon ausgehen können, dass änderbare Objekte Identitätsprüfungen für equals verwenden und nicht geändert werden. z.B. Das Datum ist veränderbar und equals vergleicht den Inhalt.
Tags und Links java