【发布时间】:2012-09-16 12:34:57
【问题描述】:
如果需要使用Class<T> 作为Map 键的一部分,那么定义hashCode 和equals 的正确方法是什么?Class<T> 继承自 Object 的那些 Object 检查引用相等性并将内存地址作为哈希码返回,但在我看来,尚不清楚 equals 和 hashCode 的有意义定义是什么 @987654330 @.
例如,我应该使用theClass.getClass().hashCode();(我们有Class<T> theClass;)来使用实际实例的方法吗?
但这似乎不是正确的做法。
例如在javadoc 中为Class<T>:
每个数组也属于一个类,反映为一个类 由具有相同元素类型的所有数组共享的对象和 维数
所以在某些情况下,相同的Class<T> 似乎在对象之间共享?那么遵循的方法是什么?也许使用theClass.hashCode() 和theClass.equals() 来使用引用相等?这里完全不确定。
【问题讨论】:
-
没有什么要定义的,因为 hashcode 和 equals 已经实现了,我很难想象如何,甚至更难想象你为什么要改变那个实现。
-
@JensSchauder:使用 Eclipse 自动生成
hashCode和equals它发出警告,抱怨hashCode和equals没有为Class定义。这让我担心是否这是一个有效的警告,我应该做点什么。 -
我不知道你想做什么,但'Class'是一个属于java本身的类。你不能为它实现任何东西。您尝试在其中添加 hashCode 和 equals 的源文件的全名是什么?
-
@JensSchauder:不确定源文件的要求。
Class<T>是可以用作Map中的键的类的成员 -
不,Class
是类 java.lang.Class 实现的类型。每个类 T 都有一个实例。它的类型是 Class 。
标签: java hash hashmap equals hashcode