java—如何检查对象是否属于给定类的类型?
我的方法获取类作为参数,我必须检查我的变量是否为Class类型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 = ?
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的气垫船一样,您通常可以通过依靠编译器为您进行检查来避免此类显式方法调用。一些方法:
- 您正在编写一个泛型对象的容器。让事物的类型为
,那么Java允许您将其表示为:T
然后创建公共类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())