2013-10-19 91 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