java—如何检查对象是否属于给定类的类型?

java—如何检查对象是否属于给定类的类型?,java,class,Java,Class,我的方法获取类作为参数,我必须检查我的变量是否为Class类型 Volvo v1 = new Volvo(); Class aClass = v1.getClass(); check(aClass); 在里面,我需要做一些类似的事情 v2 instanceof aClass ? "True" : "False"); 但这并不重要;t编译。我想您需要aClass.isInstance(v2)。关键词。我想他们不能使用instanceOf作为方法名,因为关键字不能用作方法名 v2 = ?

我的方法获取类作为参数,我必须检查我的变量是否为Class类型

Volvo v1 = new Volvo();
Class aClass = v1.getClass();
check(aClass);
在里面,我需要做一些类似的事情

   v2 instanceof aClass  ? "True" : "False");

但这并不重要;t编译。

我想您需要
aClass.isInstance(v2)
。关键词。我想他们不能使用
instanceOf
作为方法名,因为关键字不能用作方法名

v2 = ???
Volvo v1 = new Volvo();
Class aClass = v1.getClass();
aClass.isInstance( v2 )       // "check(aClass)"
或者,如果“Volvo”是一个常量,则可以使用类文字

v2 = ???
Volvo.class.isInstance( v2 );
您也可以尝试:

aClass.isAssignableFrom(v2.getClass())

当“aClass”是“v2”的超类时,正如上面提到的满是EEL的气垫船一样,您通常可以通过依靠编译器为您进行检查来避免此类显式方法调用。一些方法:

  • 您正在编写一个泛型对象的容器。让事物的类型为
    T
    ,那么Java允许您将其表示为:

    公共类MyClass{
    私事;
    公共无效设置(T){this.thing=T;}
    私有无效检查(类cls){}//可能没有必要
    }

    然后创建
    MyClass
    的实例,如下所示:
    MyClass m=new MyClass()或自Java 7:
    MyClass m=new MyClass()

  • 您确实需要该类,比如说,因为您正在使用枚举类型和许多使用相关类参数化的方法:


    public void check(类编译器不应该为您检查吗?如何声明您的检查方法?v2 instanceof Class?“True”:“False”);我在这里嗅到了可能的反模式用法,再次怀疑使用泛型更好地指定参数的类型是否是更好、更干净的解决方案,以便在编译时而不是在运行时解决问题。我已经写了一个答案,总结了避免对原始类类型的参数执行操作的方法。大多数情况下,正如@HovercraftFullOfEels已经提到的,您不需要执行这些操作,因为Java提供了让编译器为您执行检查的方法。这可能有助于解释这是什么/为什么这是一个有效的答案。
    
    aClass.isAssignableFrom(v2.getClass())