我有以下功能:
public <T> void putList(String key, List<T> lst){
if (T instanceof String) {
// Do something
}
if (T instanceof Integer) {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
在这个函数里面,我想知道<T>是String还是Integer,所以我想知道是否有办法发现它的类型?我使用上面的代码,但它生成错误
先感谢您.
由于擦除,在Java中是不可能的.大多数人做的是添加类型令牌.例:
public <T> void putList(String key, List<T> list, Class<T> listElementType) {
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,反射可以在类型参数中获得,但它适用于您已预先设置类型参数的情况.例如:
public class MyList extends List<String> {
private List<String> myField;
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,反射可以确定List的类型为String,但反射无法确定您的情况.您必须使用类似令牌的其他方法.