“动态等效”是什么意思?
我只是想知道拥有this.getClass().isInstance(aClass)
而不是的目的是this instanceof aClass
什么?有区别吗?
确定指定的 Object 是否与该 Class 表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法
“动态等效”是什么意思?
我只是想知道拥有this.getClass().isInstance(aClass)
而不是的目的是this instanceof aClass
什么?有区别吗?
确定指定的 Object 是否与该 Class 表示的对象赋值兼容。此方法是 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
是一个类的名称:它不能是一个变量。