2010-04-01 77 views

回答

6

element.getClass().getSimpleName()可能会对你期待什么。

+0

K.class.getSimpleName()是否也有诀窍?自从我java'd已经超过10年了,所以我错过了泛型。我可能错了。 – spender 2010-04-01 00:51:41

+0

但是,如果元素变量未初始化,是否有任何其他方式获得类型而不会得到空指针异常? – 2010-04-01 00:52:12

+3

K.class将不起作用(可能不会编译)。是的,你需要进行空值检查。不,没有其他方式,因为类型擦除(没有关于K的运行时信息,除非你自己存储它)。 – Thilo 2010-04-01 00:57:39

6

由于type erasure,当构造类时,无法知道类型参数是什么。但是你可以使用element.getClass()来获取元素的运行时类型(虽然不能保证 - 可能是未经检查的转换),但它可能是类型参数的子类。

但是,有一些技巧可以访问类型参数。有一些技巧,Guice can do。此外,如果您创建Foo的子类,如下所示:Foo<Integer> foo = new Foo<Integer>(){};(注意{}使其成为Foo的匿名子类),那么可以通过ParameterizedType type = (ParameterizedType) foo.getClass().getGenericSuperclass()访问类型参数,然后调用ParameterizedType的方法。这是Guice利用Java反射API的特性。