请看以下内容:
请注意,java.lang.Class本身不实现hashCode()方法,但隐式地从java.lang.Object继承它。我在JDK 1.8中验证了这一点。
是否可以将java.lang.Class用作java.util.HashMap的键?myMap.get(Foo.class)是否总是会返回像myMap.put(fooObject.getClass(), fooObject)这样的值?考虑到软件具有各种类加载器和序列化机制,结果是否仍然相同?如果不能,有什么替代方案?
Map<Class<?>, Object> myMap = new HashMap<Class<?>, Object>();
Foo fooObject = New Foo();
myMap.put(fooObject.getClass(), fooObject)
请注意,java.lang.Class本身不实现hashCode()方法,但隐式地从java.lang.Object继承它。我在JDK 1.8中验证了这一点。
是否可以将java.lang.Class用作java.util.HashMap的键?myMap.get(Foo.class)是否总是会返回像myMap.put(fooObject.getClass(), fooObject)这样的值?考虑到软件具有各种类加载器和序列化机制,结果是否仍然相同?如果不能,有什么替代方案?
getCanonicalName()
看起来确实是一个不错的替代选择。作为一个谨慎的程序员,我相信在范围内会有同名类。因此,我会理智地使用它。 - Maarten