Proxy.newProxyInstance创建的代理实例是否适合HashMap的密钥?

时间:2013-11-27 02:36:57

标签: garbage-collection hashmap key hashcode

我需要将Proxy.newProxyInstance创建的代理实例作为HashMap的键。我不确定它是否覆盖了Object的equals和hashcode方法。我不确定Object是否适合。

我检查了doc for hashcode方法:

  

尽可能合理实用,由hashCode方法定义        * class Object确实返回不同的整数        *对象。 (这通常通过转换内部来实现        *将对象的地址转换为整数。

在GC期间移动对象实例后,Object的哈希码将会更改。这是对的吗?

我得到了@NPE的explanation

  

第一次需要哈希码时执行计算。为了保持一致性,结果然后存储在对象的头中,并在后续调用hashCode()时返回。缓存是在此功能之外完成的。

因此Object的哈希码不会改变。

我是从Proxy Java Doc得到的:

  

通过其代理接口之一对代理实例进行方法调用将被分派到实例调用处理程序的invoke方法,传递代理实例,一个标识被调用方法的java.lang.reflect.Method对象,以及包含参数的Object类型数组。

这就是说,只有代理接口的那些方法才会涉及代理操作。只有当它们也在接口中时才合理地排除equals和hashCode。

因此代理不应该覆盖Obeject的实现。

由于

0 个答案:

没有答案