Cra*_*lus 8 java hash equals hashmap hashcode
如果需要使用a Class<T>作为键的一部分Map来定义hashCode和的正确方法是什么equals?
A Class<T>继承Object检查引用相等性并将内存地址作为哈希码返回的那些,但在我看来,不清楚a的有意义的定义equals和hashCode定义是什么Class<T>.
我应该使用theClass.getClass().hashCode();例如(我们有Class<T> theClass;)使用实际实例的方法吗?
但这似乎不是正确的做法.
例如在javadoc中Class<T>:
每个数组也属于一个类,它反映为一个Class对象,由具有相同元素类型和维数的所有数组共享
所以在某些情况下似乎在Class<T>对象之间共享?那么接下来的方法是什么?也许使用theClass.hashCode()和theClass.equals()使用引用相等?这里根本不确定.
实现hashCode和equals java.lang.Class继承java.lang.Object是有意义的并且通常是合适的,因为类的所有实例都保证从中返回相同的 Class对象getClass(),即
new Integer(2).getClass() == new Integer(3).getClass();
Run Code Online (Sandbox Code Playgroud)
这有点埋没在文档中; getClass()的javadoc写道:
返回:
Class对象,表示此对象的运行时类.
也可以看看:
文字,Java™语言规范的第15.8.2节.
该部分写道:
类文字求值为由当前实例的类的定义类加载器(第12.2节)定义的命名类型(或void)的Class对象.
和第12.2节写道:
性能良好的类加载器维护这些属性:
- 给定相同的名称,一个好的类加载器应该总是返回相同的类对象.
- ...
恶意类加载器可能违反这些属性.但是,它不能破坏类型系统的安全性,因为Java虚拟机可以防范这种情况.
是的,如果相同的类定义由不同的类加载器加载,则类对象将不相等.由于运行时将这些类视为独立类(只是碰巧共享相同的名称,但不一定相似,更不用说二进制兼容),这通常是需要的.
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |