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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top