Java如何创建一个接受两个列表类型的方法,而不是同时

时间:2017-04-14 22:01:12

标签: java list methods

我有这段代码

public void write(LinkedList<Drug> list, String file) {
    try (FileOutputStream fs = new FileOutputStream(System.getProperty("user.dir") + "\\res\\" + file + ".dat"); ObjectOutputStream os = new ObjectOutputStream(fs)) {
        System.out.println("Writing File...");
        os.writeObject(list);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我想要的是使用相同的方法来编写不同对象的文件,例如

LinkedList<String> temp = new LinkedList<>();
temp.add("Something");
temp.add("Something else");
write(temp, "stringlist");

并且我不想只做第二种方法

public void writeSomething(LinkedList<String> list, String file) {
    try (FileOutputStream fs = new FileOutputStream(System.getProperty("user.dir") + "\\res\\" + file + ".dat"); ObjectOutputStream os = new ObjectOutputStream(fs)) {
        System.out.println("Writing File...");
        os.writeObject(list);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

如果您的方法没有使用列表中存储的对象类型,那么您可以将方法声明如下:

public void writeSomething(LinkedList<?> list, String file)

答案 1 :(得分:1)

如上所述回答字面的问题 - 允许该方法准确接受2种列表类型 - 有两种方法可以调用私有泛型方法:

public void writeDrugs(LinkedList<Drug> list, String file) {
  writeGeneric(list, file);
}

public void writeStrings(LinkedList<String> list, String file) {
  writeGeneric(list, file);
}

private void writeGeneric(LinkedList<?> list, String file) {
  // Implementation here.
}

请注意,您的两个公共方法需要以不同的方式命名,否则它们将具有相同的擦除。

当然,如果您不关心它只是这两种类型,您可以简单地制作writeGeneric(或任何您想要的方法)方法public