我有一个通用类,说:
MyClass<T>
Run Code Online (Sandbox Code Playgroud)
在这个类的方法中,我想测试T的类型,例如:
void MyMethod()
{
if (T == String)
...
if (T == int)
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点 ?
谢谢你的帮助
Jon*_*eet 11
通常,由于类型擦除,您不能.有关详细信息,请参阅Angelika Langer的Java Generics FAQ.
你可以做的是将a传递给Class<T>你的构造函数,然后检查:
public MyClass<T>
{
private final Class<T> clazz;
public MyClass(Class<T> clazz)
{
this.clazz = clazz;
}
public void myMethod()
{
if (clazz == String.class)
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,Java不允许将基元用于类型参数,因此int也是如此...
因为类型擦除你不能......大多数.但是有一个例外.考虑:
class A {
List<String> list;
}
public class Main {
public static void main(String args[]) {
for (Field field : A.class.getDeclaredFields()) {
System.out.printf("%s: %s%n", field.getName(), field.getGenericType());
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
list: java.util.List<java.lang.String>
Run Code Online (Sandbox Code Playgroud)
如果您需要类对象,这通常是您处理它的方式:
public <T> T createObject(Class<T> clazz) {
return clazz.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
即通过传递类对象并从该类派生泛型类型.