簡體   English   中英

java - 如何檢查我的對象是否屬於給定類的類型?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM