在使用泛型时,我在java中遇到了一个小问题。我有一个A类:
public class A<T>
在A的方法中,我需要获取T的类型名称。有没有办法用T找到字符串?
(如果我创建A<String> temp = new A<String>();
,我希望能够在某一点获得java.lang.String - 我必须使用泛型,因为我的一个方法必须返回一个List。)
这似乎很容易,但我不知道该怎么做。
非常感谢您的帮助。
答案 0 :(得分:3)
由于type erasure,这是不可能的。
相反,您需要在构造函数中接受Type<T>
。
答案 1 :(得分:2)
这是不可能的,因为泛型是使用“擦除”实现的:实际上内部只有一个A
类,而<String>
在运行时被“擦除”。根据我的经验,最好的解决方案是添加一个私有的最终字段Class<T> tClass
,并要求在构造函数中指定它:
public A(final Class<T> tClass)
{
this.tClass = tClass;
}
然后你必须写
A<String> temp = new A<String>(String.class);
而不仅仅是
A<String> temp = new A<String>();