在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