【问题标题】:Method design approach where method takes variable number of values for a parameter方法设计方法,其中方法采用可变数量的参数值
【发布时间】:2020-06-30 13:26:48
【问题描述】:

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

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);
    }
}
  1. 创建方法2并编写包装器来处理单个文件实例
public void methodName(String[] files, int arg2) {
...
}
public void methodName2(String file, int arg2) {
    methodName(new String[]{file});
}
  1. 通过数组接受单个和多个参数
public void methodName(String[] files, int arg2){
...
}

methodName(new String[]{"fileOne"});
methodName(new String[]{"fileOne", "fileTwo"});

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

  1. 也许是一种不同的方法。假设通过更改参数 other 不希望使用 var args。

您现在和未来的可维护性应该考虑哪些事情?

【问题讨论】:

  • 我很不确定你所说的选项 2 是什么意思。你能为每个选项提供代码示例吗?谢谢。
  • 添加了示例,以便清楚我的意思.. 应该从一开始就完成。
  • 您所说的“var args 不希望通过更改参数 other”是什么意思? 其他是什么?

标签: java arrays list oop design-patterns


【解决方案1】:

您可能会考虑的另一件事不仅是可维护性,还有可测试性

在我看来,选项 1

我在单个文件上有一个方法methodName。如果我有一个文件列表,我可以在其上按顺序应用此 methodName

您只是在构建基于更简单功能 methodName 的自然扩展 methodName2

请注意,这是某种“分而治之”的方法。


选项 2 说:

我在files 的列表中有一个方法methodName。如果我有一个文件,我可以创建一个文件列表(单个文件)并在上面调用methodName

在这里,我们试图从更复杂的功能中构建更简单的功能,从而创建单个文件列表。


所以选项1绝对更自然。

最好测试某些东西对单一事物有效,然后您可以确定它也适用于这些事物的列表。

【讨论】:

    【解决方案2】:

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

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

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

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

    这当然适用于选项 1 和 2

    【讨论】:

    • 抱歉忘记补充说这种方法不可取。
    • @ManchuRatt 更新答案并提供有关选项 1 和 2 的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2016-08-11
    • 2011-03-18
    相关资源
    最近更新 更多