Question

C'est l'un de ces jours où quelqu'un peut m'aider avec cela.

J'ai deux objets de stock pour lesquels je souhaite comparer les propriétés au moment de l'exécution. Une instance est l'instance mise en cache, l'autre est une nouvelle instance de stock qui vient d'être livrée à mon système, qui peut correspondre ou non à l'instance mise en cache. Voir ci-dessous où m est une méthode de la classe Stock et stock est une instance de Stock

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: Pour ceux qui ont demandé pourquoi j'utilise la réflexion, j'utilise le framework DWR (Reverse Ajax) inverse et j'essaie de mapper une propriété id HTML avec les propriétés de mon objet, ce qui me permet d'annoter mes propriétés avec le code HTML associé. valeur id. En poussant l'objet vers l'interface utilisateur, cette méthode me permettra de ne pousser que les propriétés qui ont changé et non l'objet entier.

Était-ce utile?

La solution

Vous ne devriez pas avoir besoin de lancer. Java choisira automatiquement la méthode égale à appropriée. Je vous recommande de déboguer cette ligne pour voir quelle classe est chaque objet.

Autres conseils

Non, vous n'avez pas besoin de lancer. Normalement, la méthode equals ressemble à

@Override
public boolean equals(Object o){

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

   //other equality tests based on members
 }

Si votre cache ne contient qu'un seul objet de classe (c'est-à-dire ne met pas en cache les classes dérivées), cela devrait fonctionner. On dirait que vous stockez des objets dans votre StockCache. C’est peut-être un peu trop générique et il serait préférable de se limiter à une classe de base (peut-être StockClass). Ensuite, votre getter serait défini dans votre classe de cache comme suit:

StockObject getStockObject(KeyType key);

De plus, la réflexion ressemble à une surdose (si vous avez déjà les objets que vous souhaitez comparer, pourquoi utiliser la réflexion?)

La diffusion n'aura aucun effet ici. Le résultat dépend entièrement de la manière dont la méthode equals () est implémentée dans la classe Stock.

Mais pourquoi utilisez-vous la réflexion pour cela quand même? Ce n'est probablement pas la bonne chose à faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top