我有一个参数化类。我想获得类名所代表的类的名称。例如,我想要做的是:
public T foo(){
System.out.println(T.class.getName());
}
答案 0 :(得分:2)
你不能这样做,因为在编译时不知道T
。你可以实现类似的东西:
public void foo(T t) {
System.out.println(t.getClass().getName());
}
请注意,这会占用T
的实例,并会打印出动态类型的名称。
这是否足够好取决于您的使用案例。
答案 1 :(得分:1)
Java泛型不能那样工作。如果T上有任何边界,则可以通过查询类型变量定义来访问边界。 E.g:
public class Foo<T extends Bar>{}
可以让您获得Bar
,但不会获得您实际使用的Bar
子类型。它不起作用,抱歉。
阅读Java Generics FAQ了解详情。
BTW:这个问题的一个常见解决方案是将T的子类型传递给您的类,例如public T foo(Class<? extends T> tType){
System.out.println(tType.getName());
}
我知道它很麻烦,但它是所有Java泛型允许的。
答案 2 :(得分:0)
public T foo(T t){
System.out.println(t.getClass().getName());
}