2012-01-31 182 views
2

我想獲取類模板的類型名稱(例如設置)。例如,當我使用:獲取類模板的類型名稱

Set<Personne> p = new HashSet<Personne>(); 
/* manipulate p etc ... */ 

如何使用類似p.getTypeName()即使p是空的,我知道P(這是Personne)的類型名稱。

+1

Java有仿製藥,但沒有模板++。所以'HashSet'不是「類模板」。 Java中的泛型與C++中的模板不一樣。 – Jesper 2012-01-31 14:08:35

回答

6

在運行時,您不能。這是由於type erasure

+0

不是在運行時?我只想測試通用類型是否等於Personne – Mehdi 2012-01-31 14:13:37

+1

@ChrisCashwell - 這將是錯誤的,因爲'p'指向一個'HashSet',而不是'Personne'。 – 2012-01-31 14:21:52

+0

@ChrisCashwell p是一組元素,它怎麼可能是Personne的一個實例? p的一個元素可能是Personne的一個實例(也可能不是,因爲它可能只是一個像int這樣的類型) – shn 2012-01-31 14:23:41

1

由於Java的類型擦除,您無法在運行時訪問參數化類型。但是,如果你知道它是什麼類型的可能是,只是想檢查它是否是其中的一個:像在C

if (someObject instanceof SomeType) { 
    ... 
} else if (someObject instanceof SomeOtherType) { 
    ... 
} ... 
+0

然而,即使你知道它可能是什麼類型,假設你有一些某些類型的對象,我猜你不能測試類型是SomeType還是SomeOtherType,當它是空的時,對吧? – shn 2012-01-31 14:35:05

+0

@ user995434如果你有一個空集,爲什麼它傳遞了什麼參數? – 2012-01-31 14:36:35

+0

假設您在本地有一組Some類型的對象,另一組爲SomeOtherType類型的對象。假設我保留了一組類型爲T的對象,如果這個集合是空的並且T是SomeType,我想清空(清除)集合A.如果每個對象中沒有指示符告訴你它是SomeType或SomeOtherType類型? @ChrisCashwell – shn 2012-01-31 14:53:10