2016-04-28 30 views
8

因此,它是有效的以这种方式检查类的平等:Class类的实例是否保证每个类加载器都是单例?

if (object.getClass() == anotherObject.getClass()) { 

} 

也许答案是肯定的,因为Class类没有覆盖equals()所以它看起来像Object.equals()适用于类的平等。但是,如果这是其他地方记录的话,我会感兴趣。谢谢。

回答

6

参考JLS Section 12.2

乖巧的类加载器维护这些属性:

  • 由于相同的名字,一个良好的类加载器应该总是返回相同的类对象。
  • ...

恶意的类加载器可能违反这些属性。但是,它不能破坏类型系统的安全性,因为Java虚拟机会对此进行防范。

因此,如果您的实例是由相同类加载器加载的类,则可以使用标识进行测试。

相关问题