如何打印通用java类型的类型?
反射?任何技巧?
public class Foo<K> {
private K element;
@Override
public String toString() {
return "Type: " + K;
}
}
答案 0 :(得分:6)
element.getClass().getSimpleName()
可能会做你期望的事。
答案 1 :(得分:6)
由于type erasure,您无法知道构造类时的类型参数是什么。但是你可以使用element.getClass()
来获取元素的运行时类型(可能是类型参数的子类,虽然不能保证 - 可能有未经检查的强制转换)。
但是,有一些技巧可以访问类型参数。 Guice can do有一些技巧。此外,如果您创建Foo的子类,如下所示:Foo<Integer> foo = new Foo<Integer>(){};
(注意{}
使其成为Foo的匿名子类),然后可以使用{{1}访问type参数然后调用ParameterizedType的方法。这是Guice利用的Java反射API的特性。