当前位置: 首页 > 知识库问答 >
问题:

检查对象是否属于Java中的类[复制]

阎宾实
2023-03-14

有没有简单的方法来验证对象是否属于给定的类?例如,我可以这样做

if(a.getClass() = (new MyClass()).getClass())
{
    //do something
}

但是这需要每次动态实例化一个新对象,只是丢弃它。有更好的方法来检查“a”属于“MyClass”类吗?

共有3个答案

白才捷
2023-03-14

使用instanceof运算符:

if(a instanceof MyClass)
{
    //do something
}
丁曦哲
2023-03-14

如果需要动态执行此操作,可以使用以下方法:

boolean isInstance(Object object, Class<?> type) {
    return type.isInstance(object);
}

您可以获得java的一个实例。lang.Class通过对任何对象调用实例方法Object::getClass(返回该对象是其实例的Class),或者可以使用类文本(例如,String.ClassList.Classint[].Class)。还有其他方法,通过反射API(反射API本身就是反射API的入口点)。

詹甫
2023-03-14

instanceof关键字,正如其他答案所描述的,通常是您想要的。请记住,对于超类,instanceof也将返回true

如果您想查看对象是否是类的直接实例,您可以比较类。您可以通过getClass()获取实例的类对象。您可以通过ClassName.class静态访问特定的类。

所以举个例子:

if (a.getClass() == X.class) {
  // do something
}

在上述示例中,如果aX的实例,则条件为真,但如果aX的子类的实例,则条件为真。

相比较而言:

if (a instanceof X) {
    // do something
  }

instanceof示例中,如果aX的实例,或者aX的子类的实例,则该条件为真。

大多数时候,instanceof是正确的。

 类似资料:
  • 问题内容: 有没有一种简单的方法来验证对象属于给定的类?例如,我可以 但这需要每次在运行中实例化一个新对象,而只是将其丢弃。有没有更好的方法来检查“ a”是否属于类“ MyClass”? 问题答案: 如其他答案所述,关键字通常是您想要的。请记住,超类也会返回。 如果要查看对象是否是类的直接实例,则可以比较该类。您可以通过获取实例的类对象。您可以通过静态访问特定的类。 因此,例如: 在上面的例子中,

  • 问题内容: 我正在玩Java的反射API,并尝试处理一些字段。现在,我要确定字段的类型。字符串很简单,只需执行即可。其他非派生类也是如此。但是,如何检查派生类?例如作为的子类。我无法找到任何或方法。我是否需要遍历所有人并自己找到超人? 问题答案: 您需要此方法: 一般情况下,(以上)应替换为并应替换为 从JavaDoc: 确定此对象表示的类或接口是否与指定参数表示的类或接口相同或超类或超接口。如果

  • 这里有几个关于如何检查对象中是否存在属性的答案。 我一直在使用 但我想知道这和

  • 问题内容: 类文件对象是Python中的对象,其行为类似于真实文件,例如具有read()和write method(),但实现方式不同。这是鸭打字概念的实现。 优良作法是在需要文件的任何地方都允许使用类似文件的对象,以便可以使用StringIO或Socket对象代替实际文件。因此执行这样的检查很不好: 检查对象(例如方法的参数)是否为“类文件”的最佳方法是什么? 问题答案: 除非您有特殊要求,否则

  • 我想检查一个对象是否有新的子对象。我的意思是我有一个带有x嵌套对象的对象,但是如果主对象有新对象,我会检查它。有什么现有的解决方案来检查这个问题吗? 我的目标是如果对象有新项目,则调用函数。每次数组更改时,此代码都会调用该函数。也当一些项目被删除。这部分功能是错误的。有办法修好它吗?

  • java文档中提到了以下两点: "类对象在类加载时由Java虚拟机自动构造,并通过调用类加载器中的定义类方法 类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以改变类变量的值,但是类变量也可以在不创建类实例的情况下被操作。 我的问题是:类方法和类变量是否属于java中的“java.lang.class”对象?