Como obter o endereço de um objeto Java? [duplicado
-
20-09-2019 - |
Pergunta
Esta pergunta já tem uma resposta aqui:
Existe uma maneira de obter o endereço de um objeto Java?
De onde vem a pergunta?: No começo, li o arquivo de propriedades e todos os dados do arquivo foram colocados na tabela. O arquivo de propriedades pode atualizar. Então, eu quero ouvir esse arquivo. Eu ouço um objeto usando o PropertyChangesupport e o 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);
}
});
Se atualizar o estatístico alterar, eu atualizo a tabela. Mystring Class tem string privada "Valor". Eu quero ouvir o arquivo de propriedades. Portanto, ele deve tornar o arquivo atualizado do arquivo de propriedades. Se eu puder fazer isso, então não preciso ouvir o arquivo Propriedades.
updatedStatus.setValue(resourceMap.getString("HDI.Device.1.Name"));
Tentei usar StringBuffer, mas não consegui alcançá -lo. É por isso que fiz a pergunta.
Solução
Em primeiro lugar - não, você não pode obter o endereço de um objeto em Java; Pelo menos, não puro java sem agente de depuração etc. O endereço pode se mover ao longo do tempo, por uma coisa. Você não precisa disso.
Segundo, é um pouco difícil seguir sua explicação, mas você certamente não vai ser capaz de fugir sem ouvir alterações no próprio arquivo. Depois de carregar o arquivo em um Properties
objeto, qualquer alteração posterior no arquivo no disco não vai Seja visível nesse objeto, a menos que você o recarregue especificamente.
Basicamente, você deve ouvir alterações no arquivo (ou pesquisar -o) e recarregar o arquivo (em um novo Properties
ou substituir o existente) nesse ponto. Bastante se você também Precisa ouvir atualizações no contêiner de string dependerá do seu aplicativo.
Outras dicas
Podemos obter o endereço de um objeto na memória. Bem, como? é tipo isso;
Usando a classe Sun.misc.unsfe em java.
criar novo objeto inseguro e usar o getAddress(Object)
; método e retornará um valor longo que é endereço.
E também existem muitos métodos para esta classe.
você pode alterar os valores neste endereço usando putInt(Object,long offset, int value)
ou como este método. (Obtendo algum valor getnt(Object)
).
Nota: Esta classe é realmente INSEGURO . Se você fizer coisas erradas em seu projeto, JVM será parado.
System.identityHashCode(obj)
entrega a próxima melhor coisa: um número único para cada objeto. Corresponde ao padrão Object.hashCode()
implementação.
Para citar a API: "Por mais que seja razoavelmente prático, o método HashCode definido pelo objeto de classe retorna números inteiros distintos para objetos distintos ((isso é normalmente implementado pela conversão do endereço interno do objeto em um número inteiro, mas essa técnica de implementação é não exigido pela linguagem de programação JAVATM.) ".
Procure a configuração do Apache Commons. Esta biblioteca tem suporte para recarregar dinâmico de (por exemplo) arquivos de propriedade. Ver aqui.
A melhor maneira de observar se algumas alterações no arquivo é o IMHO para fazer um valor de hash com SHA1 ou MDA5 e salvar o valor em um cache. E você faz um tópico que a cada minutos, segundos, depende da frequência com que você assiste alterações de arquivo e faz valor de hash sobre o arquivo. Portanto, você pode comparar esses dois valores e se os valores não forem equivalentes para que você possa recarregar o novo arquivo.
Java não é como C/C ++. No C ++, você geralmente trabalha com o endereço (esse programador C ++ tem um ponteiro de chamada conceitual). Mas, tenho medo de que não em Java. O Java é muito seguro que impede que você toque em seu endereço.
Mas, há outras maneiras, talvez o mesmo com sua ideia seja o uso do HashCode. HashCode de uma base de objetos em seu endereço na pilha.