2012-10-03 26 views
6
class A { 
} 

class B extends A { 
} 

class TestType { 
    public static void main(String args[]) { 
     A a = new B(); 
     // I wish to use reference 'a' to check the Reference-Type which is 'A'. 
    } 
} 

可能嗎?如果不是,請說明原因。檢查持有Java對象的引用的類名稱

+7

你不能。局部變量的靜態類型不保留在字節碼中,也不保留在運行時。 (如果它是一個字段,你可以在字段的包含類上使用反射來獲得字段的類型。) –

+1

@ ChrisJester-Young你應該做出答案而不是評論。 – Jesper

回答

1

如果您致電a.getClass(),那麼它將始終返回創建此對象的類的實例。在你的情況下,它是B所以它會返回你B.class

現在,如果你想調用方法a並獲得類爲A.class那麼你將無法做到這一點正常的方式。

一條出路將在A

public static Class<A> getType() { 
     return A.class; 
    } 

被定義方法,然後你可以調用a.getType()這是A.class。我們在這裏使用靜態方法,因爲它們沒有被覆蓋。

+0

但是這種方法需要添加到每個類的一致性,所以當調用getType時,該方法將被調用類'B'。 – Ankur

+0

更新了使用靜態方法的答案。 –

+0

是的解決方案工作。 :)這是非常優雅和簡單的解決方案。 – Amber

2

檢查參考的在Java中

你不能抱着一個對象的類名。

  1. 沒有這樣的東西「參考保持的對象。可能有零這樣的引用,或者可能有六十萬億的這樣的引用。

  2. 您無法從被保持的對象內部獲取它。

相關問題