[英]java - How do I check if my object is of type of a given class?
我的方法将Class作为参数,我必须检查我的变量是否为类型类。
Volvo v1 = new Volvo();
Class aClass = v1.getClass();
check(aClass);
在里面,我需要做类似的事情
v2 instanceof aClass ? "True" : "False");
但这并没有编译。
我想你想要aClass.isInstance( v2 )
。 文档说它与instanceOf
关键字的工作原理相同 。 我猜他们不能使用instanceOf
作为方法名称,因为关键字不能用作方法名称。
v2 = ???
Volvo v1 = new Volvo();
Class aClass = v1.getClass();
aClass.isInstance( v2 ) // "check(aClass)"
或者只是使用一个类文字,如果“Volvo”是常量。
v2 = ???
Volvo.class.isInstance( v2 );
Volvo v = new Volvo();
if (v instanceof Volvo) {
System.out.println("I'm boxy, but safe.");
}
正如Hovercraft Full Of Eels所提到的,您通常可以通过依靠编译器为您进行检查来避免这种显式方法调用。 一些方法:
您正在编写一个通用类型的容器。 让事物的类型为T
,然后Java允许您表达如下:
public class MyClass<T> { private T thing; public void setThing(T t) { this.thing = t; } private void check(Class<T> cls) {} // probably not necessary }
然后创建MyClass<T>
实例,如下所示: MyClass<Volvo> m = new MyClass<Volvo>();
或者从Java 7开始: MyClass<Volvo> m = new MyClass<>();
你真的需要Class,比如因为你正在使用Enum类型,并且很多这些方法都使用相关的类进行参数化:
public void check(Class<?extends SuperType> validClsAutomaticallyChecked) {}
您只需要将特定超类型的对象传递给该方法:
public void pass(SuperType thatSimple) {}
您不需要,不能或不会使您的包含类采用要传递的事物的类型参数,但您仍然希望在方法中利用泛型。 这可能有助于编译器推断出您在方法体内执行的操作是安全的。 例如,您可能希望根据作为参数传递给方法的事物类型创建T
类型的事物的集合。
public <T> void workWith(T genericallyTypedObject) {}
你也可以尝试:
aClass.isAssignableFrom(v2.getClass())
其中“aClass”是“v2”的超类
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.