在Java中是否有像instanceOf(Class <?> c)?
我想检查一个对象o
是类C
还是C
的一个子类的一个实例。
例如,如果p
是类Point
我希望x.instanceOf(Point.class)
为true
,并且x.instanceOf(Object.class)
为true
。
我希望它也适用于盒装原始types。 例如,如果x
是一个Integer
那么x.instanceOf(Integer.class)
应该是true
。
有这样的事吗? 如果没有,我该如何实施这样的方法?
Class.isInstance做你想要的。
if (Point.class.isInstance(someObj)){ ... }
当然,如果你可以使用instanceof
,你不应该使用它,但是对于reflection场景来说,它经常派上用场。
我想检查一个对象是否是类c或c的子类的一个实例。 例如,如果p是类的Point我想要x.instanceOf(Point.class)
嗯什么? 什么是o,p和x?
我希望它也适用于原始types。 例如,如果x是一个整数,则x.instanceOf(Integer.class)和x.instanceOf(Object.class)应该为true。
不,它甚至不应该编译。 基元不是对象,你不能调用它们的方法。
无论如何,有三件事,其中一件肯定能达到你想要的(它们在适用的地方有所不同:
-
instanceof
运算符,如果你在编译时知道类。 - Class.isInstance()如果你想检查一个对象的类对不知道在编译时间的类。
- Class.isAssignableFrom()如果你想检查给定两个类对象的可分配性。
x instanceof Integer x instanceof Object
你只需要使用正确的语法
对于primitvetypes,你必须完全不同。 既然你不能为它们创build方法,你需要一个保持方法的类。 所以,而不是“x.instanceOf(Integer.Class)”,你必须调用“MyClassComparer.instanceOf(x,Integer.Class)”或类似的东西。 这可以很容易地通过重载方法来实现,但是我根本看不到这种function是可取的。
事实上,在Java中,有一个名为instanceof的布尔运算符,可用于确定对象是否是类的实例,子类的实例还是实现特定接口的类的实例。
if(obj instanceof SomeClass) { // Do something }
Java教程有这个运算符的一个很好的例子
你可以做:
if (foo instanceof classNameYouWantToCheck)
“我希望它也适用于原始types,例如,如果x是一个整数,则x.instanceOf(Integer.class)和x.instanceOf(Object.class)应该为true。
为什么? 原始types和参考types是完全分离的。 原始的int不是Integer和Object的子types。 原始值的types在编译时总是静态的,所以testing它的types没有意义。 当然,你可以打一个原始值,然后testing它的types:
(Integer)5 instanceof Integer
但是,关键是什么呢?
我想你对于原始对象和通用对象的instanceof感到困惑
obj instanceof Class obj instanceof Class<?> // this is the one you want