[英]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.