Frage

Es ist schon einer dieser Tage, kann mir jemand helfen mit diesem aus.

Ich habe 2 Stock Objekte, die ich Eigenschaften zur Laufzeit vergleichen möchten. Ein Beispiel ist die zwischengespeicherte Instanz, das andere eine neue Aktien Instanz ist, die gerade auf meinem System geliefert, die möglicherweise nicht die Cache-Instanz gleich. Siehe unten, wo m eine Methode aus der Klasse Aktien und Aktien ist eine Instanz Auf

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: Für diejenigen, die über haben gefragt, warum ich Reflexion verwende, ich bin mit dem Reverse Ajax Framework DWR und ich versuche, eine html-ID-Eigenschaft auf meine Objekteigenschaften abzubilden, so dass ich meine Objekte mit ihren zugehörigen HTML zu annotieren ID-Wert. Wenn das Objekt in den UI drückt diese Methode ermöglicht es mir nur Eigenschaften zu schieben, die sich geändert haben und nicht das ganze Objekt.

War es hilfreich?

Lösung

Sie sollten nicht werfen müssen. Java wird die richtige equals Methode automatisch wählen. Ich empfehle Ihnen, diese Linie zu debuggen, um zu sehen, was Class jedes Objekt ist.

Andere Tipps

Nein, Sie brauchen nicht zu werfen. Normalerweise entspricht Verfahren sieht aus wie

@Override
public boolean equals(Object o){

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

   //other equality tests based on members
 }

Wenn Sie den Cache nur eine Klasse-Objekte enthält (das heißt nicht abgeleiteten Klassen Caching), sollte es funktionieren. Sieht so aus, dass Sie Objekte in Ihrem StockCache sind zu speichern. Vielleicht ist das ein wenig zu allgemein, und (vielleicht StockClass) bis zu einem gewissen Basisklasse nach unten verengenden wäre eine bessere Option. Dann Ihr Getter würde, in der Cache-Klasse definiert wäre:

StockObject getStockObject(KeyType key);

Zusätzlich dazu, Reflexion scheint wie ein Overkill (wenn Sie alredy die Objekte haben Sie vergleichen wollen, warum Gebrauch Reflexion?)

Gießen keine Auswirkungen haben hier. Das Ergebnis hängt ganz davon ab, wie die Methode equals () in der Bestandsklasse implementiert wird.

Aber warum sind Sie mit Reflexion für diese überhaupt? Es ist sehr wahrscheinlich nicht das Richtige zu tun.

Haben Sie einen Blick auf diese:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top