'动态等效'是什么意思?
我想知道为什么要使用this.getClass().isInstance(aClass)
而不是this instanceof aClass
?有什么区别吗?
确定指定的对象是否可以分配给此类所表示的对象。该方法是Java语言instanceof运算符的动态等效物。
'动态等效'是什么意思?
我想知道为什么要使用this.getClass().isInstance(aClass)
而不是this instanceof aClass
?有什么区别吗?
确定指定的对象是否可以分配给此类所表示的对象。该方法是Java语言instanceof运算符的动态等效物。
是的。不仅顺序不同,而且object instanceof Clazz
必须有一个在编译时已知的类。 clazz.isInstance(object)
可以接受在运行时已知的类。
还有微妙的区别,isInstance将自动装箱,但instanceof不会。
例如:
10 instanceof Integer // does not compile
Integer.class.isInstance(10) // returns true
Integer i = 10;
if (i instanceof String) // does NOT compile
if (String.class.isInstance(i)) // is false
为了看到区别,我建议您尝试使用它们。
注意:如果您执行 object.getClass().getClass()
或 myClass.getClass()
,您将只会得到一个 Class
。请注意不要在不必要的情况下调用 getClass()
。
instanceof
运算符用于测试一个对象是否是一个固定(静态)类的实例,即在编译时已知其名称的类。
Class.isInstance
方法允许您对动态类进行测试;即只有在运行时才知道的类。
我想知道
this.getClass().isInstance(aClass)
与this instanceof aClass
相比有何不同?它们之间有区别吗?
isInstance
的目的如上所述。在第一个表达式中,aClass
是一个变量,其值是一个 Class
对象,而
在第二个表达式中,aClass
是一个类的名称:它不能是一个变量。