Как получить адрес объекта Java? [дубликат]
этот вопрос уже есть ответ здесь:
- есть ли способ получить ссылку-адрес? [дубликат] 5 ответов
есть ли способ получить адрес объекта Java?
откуда возникает вопрос?: Сначала я прочитал файл свойств, и все данные из файла были помещены в таблицу. Файл свойств можете обновить. Итак, я хочу прослушать этот файл. Я слушаю объект, используя PropertyChangeSupport и PropertyChangeListener.
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);
}
});
Если updatedStatus изменяется, я обновляю таблицу. Класс MyString имеет закрытую строку "Value". Я хочу прослушать файл свойств. Таким образом, он должен сделать updatedStatus.значение и строка файла свойств равны по одному адресу. Если я могу это сделать, поэтому мне не нужно слушать файл свойств.
updatedStatus.setValue(resourceMap.getString("HDI.Device.1.Name"));
Я попытался использовать StringBuffer, но не смог добиться этого. Вот почему я задал этот вопрос.
6 ответов
во-первых-нет, вы не можете получить адрес объекта в Java; по крайней мере, не чистая Java без агента отладки и т. д. Во-первых, адрес может меняться со временем. Тебе это не нужно.
во-вторых, немного трудно следовать вашему объяснению, но вы, конечно,не иметь возможность уйти, не дожидаясь изменения в сам файл. После того как вы загрузили файл в Properties
объект, любые последующие изменения в файле на диске не быть видимым в этом объекте, если вы специально не перезагрузите его.
в основном вы должны прослушать изменения в файле (или опросить его) и перезагрузить файл (либо в новый Properties
или перезапись существующего) в этот момент. Совсем ли ты и необходимость прослушивания обновлений в строковом контейнере будет зависеть от вашего приложения.
мы можем получить адрес объекта в памяти. Ну как? это так;
С помощью солнца.разное.Небезопасный класс в java.
создайте новый небезопасный объект и используйте getAddress(Object)
; метод и он вернет длинное значение, которое является адресом.
а также есть много методов для этого класса.
вы можете изменить значения в этом адресе, используя putInt(Object,long offset, int value)
или такой способ.(получение некоторого значения getnt(Object)
).
Примечание: этот класс действительно небезопасных . если вы делаете неправильные вещи в своем проекте,JVM будет прекращена.
System.identityHashCode(obj)
обеспечивает следующую лучшую вещь: число, уникальное для каждого объекта. Соответствует значению по умолчанию Object.hashCode()
реализация.
чтобы процитировать API: "насколько это разумно практично, метод hashCode, определенный объектом класса, возвращает различные целые числа для различных объектов. (Это обычно реализуется путем преобразования внутренний адрес объекта в целое число, но этот метод реализации не требуется программирования javatm, и язык.)".
Java не нравится C / C++. в C++ вы часто будете работать с адресом (у этого программиста C++ есть указатель вызова концепции). Но, боюсь, что не на Java. Java очень безопасен, что мешает вам коснуться его адреса.
но, есть и другие способы, возможно, то же самое с вашей идеей-использовать хэш-код. Хэш-код базы объектов по их адресу в куче.
посмотрите на конфигурацию Apache Commons. Эта библиотека поддерживает динамическую перезагрузку (например) файлов свойств. См.здесь.
лучший способ наблюдать, если некоторые изменения файла IMHO, чтобы сделать хэш-значение с sha1 или mda5 и сохранить значение в кэше. И Вы делаете поток, который каждые минуты, секунды зависит от того, как часто вы смотрите изменения файла, и делаете хэш-значение над файлом. Таким образом, вы можете сравнить эти два значения, и если значения не эквивалентны, вы можете перезагрузить новый файл.