Pergunta

Tem sido um daqueles dias alguém pode me ajudar com isso.

Eu tenho 2 objetos de Stock qual deseja comparar propriedades em tempo de execução. Um exemplo é a instância em cache, o outro é uma nova instância da que acaba de ser entregue ao meu sistema, que pode ou não pode ser igual à instância em cache. Veja abaixo onde m é um método de classe do estoque e estoque é uma instância de da

try {

// I want to compare these two objects, return type of m may vary
Object result = m.invoke(stock);
Object cacheResult = m.invoke(stockCache.get(ticker));

// The return type of m may vary but is known at runtime
Class returnType = m.getReturnType();

// I assume I need to cast before .equals() will work correctly
if(result.equals(cacheResult)) {
    // Will this work or do I need to cast
}

  }catch (Exception ex) {
 }

EDIT: Para aqueles que têm perguntado sobre por que estou usando a reflexão, estou usando o inverso DWR quadro ajax e estou tentando mapear uma propriedade html id para meus propriedades do objeto, permitindo-me para anotar minhas propriedades com o seu HTML associado valor id. Ao empurrar o objeto para o UI este método vai permitir-me a empurrar única propriedades que foram alteradas e não o objeto inteiro.

Foi útil?

Solução

Você não deve precisar de elenco. Java irá escolher automaticamente o método equals correta. Eu recomendo que você depurar essa linha para ver o que Class cada objeto é.

Outras dicas

Não, você não precisa elenco. Normalmente, é igual a método se parece com

@Override
public boolean equals(Object o){

   if (! o instance of ThisClass){
      return false;
   }

   //other equality tests based on members
 }

Se o seu cache armazena apenas uma classe-objetos (isto é, não o cache de classes derivadas), ele deve funcionar. Se parece que você está armazenando objetos no seu StockCache. Talvez isso seja um pouco demasiado genérica, e estreitando para baixo a alguma classe base (talvez StockClass) seria uma opção melhor. Em seguida, o getter seria, definido na sua classe de cache seria:

StockObject getStockObject(KeyType key);

Além disso, a reflexão parece ser um exagero (se você alredy ter os objetos que você quiser comparar, por que usar reflexão?)

Fundição não terá qualquer efeito aqui. O resultado depende inteiramente de como os equals () método é implementado na classe Stock.

Mas por que você está usando a reflexão para isso de qualquer maneira? É mais provável que não é a coisa certa a fazer.

Tenha um olhar para isto:

http://code.google.com/p/simplestuff

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