获取实例类的最佳方法是什么?
推荐的方式是什么?以下是什么区别(表现):
if( this.getClass().equals(MyClass.class) ){
这似乎与this.getClass() == MyClass.class
相同(或者可能使用Class.forName("com.test.MyClass")
)
测试的实例(似乎更具可读性)
if( this instanceof MyClass ){
使用类
测试实例if( MyClass.class.isInstance(myInst) ){
答案 0 :(得分:2)
当你想要完全匹配一个类时,我会推荐this.getClass().equals( MyClass.class)
因为"someString" instanceOf Object
将产生true,因为String类是Object的子类型。
这是检查任何实例和类之间的is a
关系。
在您的情况下,MyClass
的任何子类都会生成true
instanceof
测试左边的东西是右边的类型还是某个子类型的实例。getClass() == ...
测试类型是否相同。答案 1 :(得分:1)
选项一只会告诉您该类是否与您正在测试的完全相同。这通常不是很有用。例如,接口完全没有意义。如果这实际上是你想要做的,你可以使用==
,除非你搞乱了不同的ClassLoader
,在这种情况下,每个Class
可能有多个实例。对象。
选项二告诉您对象是否可以静态分配给给定的类(即可以转换为它)。
选项3与两个相同,但使用reflection API。如果你正在进行动态打字,你只需要这个。内置的instanceof
更具可读性,效率更高。