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

我有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时,此方法将允许我仅推送已更改的属性而不是整个对象。

有帮助吗?

解决方案

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

其他提示

不,你不需要施放。 通常,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);

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top