【问题标题】:Java compiler warning caused by generics when saving ArrayLists [duplicate]保存ArrayLists时由泛型引起的Java编译器警告[重复]
【发布时间】: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();}
    }
}

【问题讨论】:

  • 好了,哈哈。谢谢你。

标签: java generics arraylist objectoutputstream


【解决方案1】:

我很确定编译器存在泛型安全问题,因为我尝试将 Object 强制转换为 ArrayList。

不仅仅是泛型安全问题,也是类型安全问题。您假设接下来是ArrayList,并且您可以安全地将其用作ArrayList&lt;Integer&gt;.

如何保存 ArrayList 而不会导致这种情况?

您的问题不在于保存它,而在于取回它。在声明之前添加@SuppressWarnings("unchecked") 或任何内容。

【讨论】:

  • +1 我认为你已经搞定了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多