2012-01-31 151 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