保存ArrayLists时由泛型引起的Java编译器警告[重复]
Posted
技术标签:
【中文标题】保存ArrayLists时由泛型引起的Java编译器警告[重复]【英文标题】:Java compiler warning caused by generics when saving ArrayLists [duplicate] 【发布时间】:2013-10-19 06:12:59 【问题描述】:这似乎是一个非常标准的问题,但它太简单了,我不知道该怎么办。从我在 SO 其他地方读到的内容来看,这是由泛型在初始化 ArrayList 时未指定参数引起的。我也知道当我注释掉ArrayList<Integer> p = (ArrayList<Integer>)is.readObject();
时不会出现警告,所以我很确定编译器存在泛型安全问题,因为我试图将Object
转换为ArrayList<Integer>
。如何保存ArrayList
而不会导致这种情况?
代码如下:
import java.util.*;
import java.io.*;
public class FileTest
public static void main(String[] args)
String fileName = "fred.txt";
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(2);
a.add(3);
a.add(4);
try
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(fileName));
os.writeObject(a);
os.close();
catch(FileNotFoundException e)e.printStackTrace();
catch(IOException e)e.printStackTrace();
try
ObjectInputStream is = new ObjectInputStream(new FileInputStream(fileName));
ArrayList<Integer> p = (ArrayList<Integer>)is.readObject();
//for(int i : p) System.out.println(i);
catch(FileNotFoundException e)e.printStackTrace();
catch(IOException e)e.printStackTrace();
catch(ClassNotFoundException e)e.printStackTrace();
【问题讨论】:
好了,哈哈。谢谢你。 【参考方案1】:我很确定编译器存在泛型安全问题,因为我尝试将 Object 强制转换为 ArrayList。
不仅仅是泛型安全问题,也是类型安全问题。您假设接下来是ArrayList
,并且您可以安全地将其用作ArrayList<Integer>.
如何保存 ArrayList 而不会导致这种情况?
您的问题不在于保存它,而在于取回它。在声明之前添加@SuppressWarnings("unchecked")
或任何内容。
【讨论】:
+1 我认为你已经搞定了以上是关于保存ArrayLists时由泛型引起的Java编译器警告[重复]的主要内容,如果未能解决你的问题,请参考以下文章