创建一个采用任何类型的Arraylist的函数?

时间:2015-11-08 01:58:48

标签: java arraylist

我有一个编程任务,我必须保存单独的文件,一个是日志文件,另一个是dat文件。每个人都拿了一个arraylist对象并将其保存在文件中,但每个arraylist都不同。我正处于紧张状态,所以我最终为两者制作了单独的功能,但我想知道是否有更模块化的方式。例如:

 public void saveLog (ArrayList<A> objectArray, File fileName) throws IOException {
    if (!fileName.exists()) {
        logFile.createNewFile();
    }

    FileOutputStream fileoutput = new FileOutputStream(fileName);
    ObjectOutputStream output = new ObjectOutputStream(fileoutput);
    output.writeObject(objectArray);
    output.close();
    fileoutput.close();

}

有没有办法重新编码,所以它也需要ArrayList&#34;&lt;&#34; B&#34;&gt;&#34; ?我尝试使用ArrayList&#34;&lt;&#34; Object&#34;&gt;&#34;但那引发了一个错误。非常新的java,如果这看起来像一个简单的问题,那就很抱歉。

2 个答案:

答案 0 :(得分:3)

基本上你需要接受一个包含可以序列化的对象的ArrayList,这可以用wildcard轻松表达,例如:

public void saveLog(ArrayList<? extends Serializable> objectArray, File fileName) {
  ..
}

这意味着“接受实现ArrayList接口的未指定类型的Serializable”,这是ObjectOutputStream的要求。

答案 1 :(得分:0)

你可以在A上使方法通用(我更喜欢List接口)。另外,我更喜欢try-with-resources Statement。像

public <A> void saveLog(List<A> objectArray, File fileName)
        throws IOException {
    if (!fileName.exists()) {
        logFile.createNewFile();
    }
    try (FileOutputStream fileoutput = new FileOutputStream(fileName);
            ObjectOutputStream output = new ObjectOutputStream(fileoutput)) {
        output.writeObject(objectArray);
    }
}