我想检查一个对象o
是否是类的实例C
或的子类C
。
例如,如果p
is是类,Point
我想x.instanceOf(Point.class)
成为true
并且也要x.instanceOf(Object.class)
成为true
。
我希望它也适用于装箱的原始类型。例如,如果x
是Integer
那么x.instanceOf(Integer.class)
应该是true
。
有这样的事吗?如果没有,如何实现这种方法?
Answers:
Class.isInstance可以满足您的需求。
if (Point.class.isInstance(someObj)){
...
}
当然,如果可以使用它,则不应该使用它instanceof
,但是对于反射场景,它通常派上用场。
if (a instanceof Point)
,但是您以一种更加复杂的方式来执行此操作,那么阅读该代码的人必然会想:“哦,必须有一个很难做到这一点的理由”,并且然后跳至文档以找出Class.isInstance
与的不同之处instanceof
。你浪费同事的时间。
我想检查对象o是c类的实例还是c的子类。例如,如果p是Point类,我想要x.instanceOf(Point.class)
嗯什么?o,p和x是什么?
我希望它也适用于原始类型。例如,如果x是整数,则x.instanceOf(Integer.class)和x.instanceOf(Object.class)都应该为true。
不。它甚至不应该编译。基元不是对象,您不能在它们上调用方法。
无论如何,有三件事,其中一项绝对可以实现您想要的(它们在确切的应用位置有所不同:
instanceof
运营商如果你知道在编译时的类。实际上,在Java中,有一个名为instanceof的布尔运算符,该运算符可用于确定对象是实现特定接口的类的实例,子类的实例还是类的实例。
if(obj instanceof SomeClass) {
// Do something
}
Java教程对此操作符提供了很好的示例
我认为您对原始对象和通用对象的instanceof感到困惑
obj instanceof Class
obj instanceof Class<?> // this is the one you want
instanceof
。