Java 列表参数化?

标签 java generics list parameterized

我对 Java 很陌生...... 我写了一个类叫做 DLPFile 它基本上是其他对象的容器,如字符串、整数、 float 等。

将我的文件放入列表然后将其保存在我的 session (来自 Map 类)变量时很容易;

DLPFile file = new DLPFile();
List <DLPFile >fileList =  new ArrayList <DLPFile>();
fileList.add(file);
session.put("filesList", fileList);

但是如何从 session 变量中检索列表? 当我这样做时:

List <DLPFile files = (List) session.get("fileslist");

我收到了一些警告:

"List is a raw type.References to generic type List<E> should be parameterized."

我试过了

List <DLPFile files = (List <DLPFile> ) session.get("fileslist");   
List <DLPFile files = (List ) session.get("fileslist")<DLPFile>; and
List <DLPFile files = (List) <DLPFile>  session.get("fileslist");

但是没有效果

我想这是一个“转换”问题......(也许?)

提前致谢;)

最佳答案

这是因为泛型类型删除。当您从 session 中获取它时,编译器无法确定实际的泛型类型参数(除非您 session.get 采用 Class 参数来相应地转换它),因为 session 可能只返回对象的类型。您可以确保您的对象是 List 的实例,但是泛型类型信息丢失了(基本上编译器在内部将其转换为 List)。这就是您收到警告的原因,因为只有作为程序员的您才能知道要将其转换为的泛型类型参数是否正确。

如果您不喜欢这个警告,您可以添加一个

@SuppressWarnings("unchecked")

方法开头的注释。

关于Java 列表参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1356382/