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

Java How to make a method that accepts two list types, not at the same time

我有这段代码

1
2
3
4
5
6
7
8
9
10
11
public void write(LinkedList<Drug> list, String file) {
    try (FileOutputStream fs = new FileOutputStream(System.getProperty("user.dir") +"\
es\" + 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();
    }
}

我想用同样的方法来写一个不同对象的文件,例如

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

我不想做第二种方法

1
2
3
4
5
6
7
8
9
10
11
public void writeSomething(LinkedList<String> list, String file) {
    try (FileOutputStream fs = new FileOutputStream(System.getProperty("user.dir") +"\
es\" + 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();
    }
}


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

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


要按照所述逐字回答您的问题-允许方法只接受两个列表类型-有两个方法调用私有泛型方法:

1
2
3
4
5
6
7
8
9
10
11
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方法。