Java反射等于问题

时间:2009-05-07 13:48:46

标签: java reflection equals

有一天,有人可以帮我解决这个问题。

我有2个Stock Objects,我想比较运行时的属性。一个实例是缓存实例,另一个是刚刚传递到我的系统的新库存实例,它可能与缓存实例相同或不相等。请参阅下文,其中m是类库存中的方法,库存是库存的实例

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) {
 }
编辑:对于那些询问我为什么使用反射的人,我正在使用反向ajax框架DWR,我正在尝试将html id属性映射到我的对象属性,允许我使用关联的HTML注释我的属性id值。将对象推送到UI时,此方法将允许我仅推送已更改的属性而不是整个对象。

4 个答案:

答案 0 :(得分:7)

你不应该施展。 Java将自动选择正确的equals方法。我建议您调试该行以查看每个对象的Class

答案 1 :(得分:3)

不,你不需要施放。 通常,equals方法看起来像

@Override
public boolean equals(Object o){

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

   //other equality tests based on members
 }

如果你的缓存只包含一个类对象(即不缓存派生类),它应该可以工作。 看起来您正在StockCache中存储对象。也许这有点过于通用,缩小到某个基类(也许是StockClass)将是一个更好的选择。然后,你的getter将在你的缓存类中定义:

StockObject getStockObject(KeyType key);

除此之外,反射看起来像是一种矫枉过正(如果您想要比较的对象,为什么要使用反射?)

答案 2 :(得分:2)

施法不会对此产生任何影响。结果完全取决于如何在Stock类中实现equals()方法。

但是你为什么还要使用反射呢?这很可能不是正确的事情。

答案 3 :(得分:1)