Frage

    

Diese Frage bereits eine Antwort hier:

         

Gibt es eine Möglichkeit Adresse eines Java-Objekt zu bekommen?

Wenn die Frage kommt ?: Zuerst las ich Eigenschaftsdatei und alle Daten aus der Datei wurde in Tabelle platziert. Eigenschaften Datei kann aktualisieren. Also, ich möchte diese Datei hören. Ich höre ein Objekt mit Property und Property.

updatedStatus = new basit.data.MyString();
    updatedStatus.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

        //After changes "i", we inform the table model about new value
            public void propertyChange(PropertyChangeEvent evt) {
                Object objec=evt.getNewValue();
                tableModel.setValueAt(objec.toString(), 0, 5);
            }
        });

Wenn updatedStatus ändert sich dann i-Update-Tabelle. MyString Klasse hat privaten String "Value". Ich möchte Eigenschaften Datei hören. So soll es machen updatedStatus.value und String von Eigenschaften Datei gleich an der gleichen Adresse. Wenn ich es tun kann, so dass ich Eigenschaften Datei nicht brauchen zu hören.

updatedStatus.setValue(resourceMap.getString("HDI.Device.1.Name"));

Ich habe versucht, String zu verwenden, aber ich konnte es nicht erreichen. Deshalb bat ich die Frage.

War es hilfreich?

Lösung

Zum einen - nein, man kann nicht die Adresse eines Objekts in Java erhalten; zumindest nicht reine Java ohne Debug-Agenten usw. Die Adresse kann im Laufe der Zeit, für eine Sache bewegen. Sie brauchen es nicht.

Zweitens, es ist etwas schwer, Ihre Erklärung zu folgen, aber Sie sicherlich wird nicht der Lage sein, ohne sich in die Datei für Änderungen zu hören wegzukommen. Sobald Sie die Datei in ein Properties Objekt geladen haben, werden alle späteren Änderungen an der Datei auf der Festplatte nicht in das Objekt sichtbar sein, wenn Sie es speziell neu zu laden.

Grundsätzlich sollten Sie sich für Änderungen an der Datei hören (oder es abfragt) und laden Sie die Datei (entweder in eine neue Properties oder Überschreiben der vorhandenen) an diesem Punkt. Ganz ob Sie auch Notwendigkeit für Updates auf dem String Container hört auf Ihrer Anwendung ab.

Andere Tipps

können wir Adresse eines Objekts im Speicher erhalten. Nun wie? es ist so;

mit sun.misc.Unsafe Klasse in Java.

Erstellen neues Unsafe Objekt und verwenden Sie die getAddress(Object); Verfahren und es wird ein langer Wert zurück, die Adresse ist.

und auch gibt es viele Methoden für diese Klasse.

können Sie die Werte in dieser Adresse ändern putInt(Object,long offset, int value) oder ähnliche Verfahren. (Einen Wert getnt(Object) bekommen).

Hinweis: Diese Klasse ist wirklich UNSAFE . wenn Sie falsche Dinge an Ihrem Projekt machen, JVM wird gestoppt.

System.identityHashCode(obj) liefert die nächstbeste Sache: eine eindeutige Nummer für jedes Objekt. Sie entspricht der Standard Object.hashCode() Implementierung.

Um die API zitieren:. „So viel wie vernünftigerweise praktikabel ist, die Methode hashCode von der Object-Klasse definiert verschiedenen ganzen Zahlen für verschiedene Objekte zurückgibt (Dies wird typischerweise implementiert durch die interne Adresse des Objekts in eine ganze Zahl konvertieren, aber das Implementierungstechnik ist nicht von der JavaTM-Programmiersprache erforderlich.)“.

Schauen Sie in Apache Commons Konfiguration. Diese Bibliothek hat die Unterstützung für dynamische von (zum Beispiel) Eigenschaftsdateien neu zu laden. Siehe hier .

Der beste Weg, zu beobachten, wenn einige Dateiänderungen IMHO einen Hash-Wert mit SHA1 oder MDA5 zu machen und dem Wert in einem Cache speichern. Und Sie machen einen Thread, der alle Minuten, Sekunden, hängt, wie oft Sie Dateiänderungen und Make-Hash-Wert über die Datei zu sehen. So können Sie diese beiden Werte vergleichen, und wenn die Werte nicht gleich sind, so können Sie die neue Datei laden.

Java nicht wie C / C ++. in C ++, werden Sie oft die Arbeit mit Adresse (das C ++ Programmierer ein Konzept Aufruf Zeiger hat). Aber ich fürchte, dass nicht in Java. Java ist sehr sicher, dass Sie verhindern, dass seine Adresse berühren.

Aber es gibt andere Möglichkeiten, vielleicht gleiche mit Ihrer Idee ist die Verwendung HashCode. HashCode eines Objekts Basis auf ihre Adresse auf HEAP.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top