2013-10-19 25 views
0

这似乎是一个非常标准的问题,但它非常简单,我不知道该怎么做。从我在其他地方读过的内容可以看出,这是由ArrayLists在未指定参数的情况下进行初始化时由泛型引起的。我也知道,当我注释掉ArrayList<Integer> p = (ArrayList<Integer>)is.readObject();时,警告没有出现,所以我敢肯定编译器存在一个泛型安全问题,我试图将Object转换为ArrayList<Integer>。我怎样才能保存ArrayList而不造成这种情况?保存ArrayLists时由泛型引起的Java编译器警告

下面的代码:

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();} 
    } 
} 
+0

那么你去,哈哈。感谢那。 –

回答

2

我敢肯定有与我的编译器试图将对象转换为一个ArrayList泛型安全问题。

不只是一个泛型安全问题,一个安全问题。你是假设接下来的事情是ArrayList并且您可以放心地使用它作为一个ArrayList<Integer>.

我如何保存ArrayList中没有造成什么呢?

你的问题不在于保存它,而是在恢复它。添加@SuppressWarnings("unchecked")或者声明前的任何内容。

+1

+1我认为你已经钉了很多 – Bohemian