java - 方法设计方法,其中方法采用可变数量的参数值

标签 java arrays list oop design-patterns

我有可以采用单个文件名或文件数组/列表的方法,并对它们进行一些处理,如下所示:

public void methodName(String file, int arg2) {
...
}

或者

public void methodName(String[] files, int arg2) {
...
}

假设它有相同的机会获取单个文件或文件列表。在没有其他限制的情况下,针对这种情况的最佳设计方法是什么?

  1. 创建方法 1 并围绕它编写包装器来处理文件列表
public void methodName(String file, int arg2) {
...
}
public void methodName2(String[] fileName, int arg2) {
    for(String fn : fileName) {
        methodName(fn, arg2);
    }
}
  • 创建方法 2 并编写包装器来处理单个文件实例
  • public void methodName(String[] files, int arg2) {
    ...
    }
    public void methodName2(String file, int arg2) {
        methodName(new String[]{file});
    }
    
  • 通过数组接受单个和多个参数
  • public void methodName(String[] files, int arg2){
    ...
    }
    
    methodName(new String[]{"fileOne"});
    methodName(new String[]{"fileOne", "fileTwo"});
    

    选项 3 在传递参数时似乎有点粗糙;必须为单个实例创建数组。

  • 也许是一种不同的方法。假设 var args 不适合通过更改参数 other 来实现。
  • 为了将来的可维护性,您现在应该考虑哪些事情?

    最佳答案

    选项 3 可以使用可变参数,请注意,arg2 必须位于方法声明中的文件之前

    public void methodName(int arg2, String... files) {
        for (String file: files) {
    
        }
    }
    

    关于选项 1 和 2,它们基本相同,但内部差异很小。不过,您应该利用方法重载并使用相同的方法名称,这将为公共(public)方法的用户带来很大的优势。

    public void methodName(String file, int arg2) {
        ...
    }
    
    public void methodName(String[] file, int arg2) {
        ...
    }
    

    这当然适用于选项 1 和 2

    关于java - 方法设计方法,其中方法采用可变数量的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60756706/

    相关文章:

    Javascript - 具有键值对的对象,其中值是一个数组

    java - 与 Swift 数组等效的 Java 集合是什么?

    python - Numpy:a[i][j] 和 a[i,j] 之间的区别

    javascript - 使用对象

    r - 在嵌套列表中从第一个列表中选择第一个元素,从第二个列表中选择第二个元素,依此类推

    Java同步: If more than one methods in java are made atomic/synchronized,锁是同时应用于所有的吗?

    java - 使用 SPARQL 查询将数据类型 dataTime 插入本体中

    Java继承子类和父类(super class)

    java - 查找具有两个循环的递增连续子序列

    java - 如何从数组中获取 5 个数字的序列