6

“动态等效”是什么意思?

我只是想知道拥有this.getClass().isInstance(aClass)而不是的目的是this instanceof aClass什么?有区别吗?

确定指定的 Object 是否与该 Class 表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法

4

2 回答 2

11

是的。不仅顺序不一样,而且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()在不需要的时候打电话。

于 2013-09-02T14:25:40.400 回答
4

instanceof运算符测试对象是否是固定(静态)类的实例;即名称在编译时已知的类。

Class.isInstance方法允许您针对动态类进行测试;即仅在运行时才知道的类。


我只是想知道拥有this.getClass().isInstance(aClass)而不是的目的是this instanceof aClass什么?有区别吗?

的目的isInstance如上。

这两个表达式之间的主要区别是:

  • 在第一个中,aClass是一个变量,其值是一个Class对象,并且

  • 在第二个中,aClass是一个类的名称:它不能是一个变量。

于 2013-09-02T14:27:15.200 回答