在Java中的List中获取泛型类型

Phu*_*yen 7 java generics

我有以下功能:


    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,所以我想知道是否有办法发现它的类型?我使用上面的代码,但它生成错误

先感谢您.

Tej*_*eni 9

您无法找到T类型信息被删除的类型.请查看此内容以获取更多详 但是如果列表不为空,您可以从列表中获取一个元素,并可以找到使用instanceofif else

  • 假设你得到一个元素并且它是null,那么instanceof将无法帮助你 (4认同)

Bra*_*pit 9

由于擦除,在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,但反射无法确定您的情况.您必须使用类似令牌的其他方法.