如何避免Java中列表方法中的代码重复?

如何避免Java中列表方法中的代码重复?,java,Java,下面的方法读取文件并返回特定的列表类型 List<X> readFile(String file) { List<X> x = new ArrayList<X>(); File f = new File(file); List<String> lines = null; try { lines = Files.readLines(f, Charsets.UTF_8); } catch (I

下面的方法读取文件并返回特定的列表类型

List<X> readFile(String file) {
    List<X> x = new ArrayList<X>();

    File f = new File(file);

    List<String> lines = null;
    try {
        lines = Files.readLines(f, Charsets.UTF_8);
    } catch (IOException e) {
    }

    List<X> xList = new ArrayList<X>();
    for (String line : lines) {
        xList.add(new X(line));
    }

    return xList;
}
List<Y> readFile(String file) {
    List<Y> y = new ArrayList<Y>();

    List<String> lines = null;
    try {
        lines = Files.readLines(f, Charsets.UTF_8);
    } catch (IOException e) {
    }

    List<Y> yList = new ArrayList<Y>();
    for (String line : lines) {
        yList.add(new Y(line));
    }

    return yList;
}
列表读取文件(字符串文件){
列表x=新的ArrayList();
文件f=新文件(文件);
列表行=空;
试一试{
lines=Files.readLines(f,Charsets.UTF_8);
}捕获(IOE异常){
}
List xList=new ArrayList();
用于(字符串行:行){
xList.add(新的X(行));
}
返回xList;
}
现在需要一个不同的列表。该方法已被复制,下面返回不同的列表类型

List<X> readFile(String file) {
    List<X> x = new ArrayList<X>();

    File f = new File(file);

    List<String> lines = null;
    try {
        lines = Files.readLines(f, Charsets.UTF_8);
    } catch (IOException e) {
    }

    List<X> xList = new ArrayList<X>();
    for (String line : lines) {
        xList.add(new X(line));
    }

    return xList;
}
List<Y> readFile(String file) {
    List<Y> y = new ArrayList<Y>();

    List<String> lines = null;
    try {
        lines = Files.readLines(f, Charsets.UTF_8);
    } catch (IOException e) {
    }

    List<Y> yList = new ArrayList<Y>();
    for (String line : lines) {
        yList.add(new Y(line));
    }

    return yList;
}
列表读取文件(字符串文件){
列表y=新的ArrayList();
列表行=空;
试一试{
lines=Files.readLines(f,Charsets.UTF_8);
}捕获(IOE异常){
}
List yList=新的ArrayList();
用于(字符串行:行){
yList.add(新的Y(行));
}
返回yList;
}
问题是该类已被复制。在这种情况下如何避免代码重复

尝试

avoidDuplicatedCode(){
    List<Y> y = new ArrayList<Y>();

    List<String> lines = null;
    try {
        lines = Files.readLines(f, Charsets.UTF_8);
    } catch (IOException e) {
    }

    return y
}
avoidDuplicatedCode(){
列表y=新的ArrayList();
列表行=空;
试一试{
lines=Files.readLines(f,Charsets.UTF_8);
}捕获(IOE异常){
}
返回y
}
结果:

  • 将方法返回类型设置为“列表”

更改后会出现许多其他问题

您可以引入通用参数:

<T> List<T> readFile(String file) {
    List<T> list = new ArrayList<T>();
    // ...
    return list;
}

public void foo() {
    List<Integer> l1 = readFile("l1");
    List<String> l2 = readFile("l2");
}
列表读取文件(字符串文件){
列表=新的ArrayList();
// ...
退货清单;
}
公共图书馆{
列表l1=读取文件(“l1”);
列表l2=读取文件(“l2”);
}

如果不处理文件中的所有行,那么读取它们有什么意义?这些方法的实际代码是什么?按原样,您可以将第一个替换为
new ArrayList()
,将第二个替换为
new ArrayList()
。如果您不关心
列表,那么读取文件有什么意义?关于您的问题:将“something”从
String
转换为
X
Y
,然后您只需要一个通用方法。我忘了添加代码中缺少的部分,即将行添加到列表中的部分。感谢您的解释。我遇到的另一个问题是在类中创建了一个新对象。这是否也可以成为泛型(
xList.add(新的X(行));
vs。但是有一些解决方法,例如,您可以传递一个创建T作为附加参数的函数