Java 方法设计方法,其中方法为参数获取可变数量的值
我有一个方法,可以采用单个文件名或文件数组/列表,并对其进行如下处理:Java 方法设计方法,其中方法为参数获取可变数量的值,java,arrays,list,oop,design-patterns,Java,Arrays,List,Oop,Design Patterns,我有一个方法,可以采用单个文件名或文件数组/列表,并对其进行如下处理: public void methodName(String file, int arg2) { ... } 或 让我们假设有相同的可能性,它将采取单一或列表的文件。在没有其他限制的情况下,这种情况的最佳设计方法是什么 创建方法1并在其周围编写包装器来处理文件列表 创建方法2并编写包装器来处理单个文件实例 通过数组接受单个和多个参数 通过args时,选项3似乎有点粗糙;必须为单个实例创建数组 也许是另一种方法。假设通过更改其
public void methodName(String file, int arg2) {
...
}
或
让我们假设有相同的可能性,它将采取单一或列表的文件。在没有其他限制的情况下,这种情况的最佳设计方法是什么
<> P>你现在应该考虑什么和将来的可维护性? 选项3可以使用varargs,注意在方法声明中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。选项3可以使用varargs,请注意,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
< P>另一件您可以考虑的不仅是可维护性,而且是强>可测试性< /强> 在我看来,选项1说 我在单个文件上有一个方法methodName
。如果我有一个文件列表,我就可以按顺序应用这个methodName
您只是在构建基于更简单功能的自然扩展methodName2
注意,这是一种“分而治之”的方法
选项2说明: 我在
文件列表中有一个方法methodName
。如果我有一个文件,我可以创建一个文件列表(单个文件)并在上面调用methodName
在这里,我们试图从更复杂的功能中构建更简单的功能,从而创建单个文件列表
因此,选项1显然更自然
<>最好是<强>测试<强>某物在单个事物上工作,那么你可以确信它也会在这些事物的列表中起作用。 你可以考虑的另一件事不仅是可维护性,而且是“强>可测试性< /强>
在我看来,选项1说
我在单个文件上有一个方法methodName
。如果我有一个文件列表,我就可以按顺序应用这个methodName
您只是在构建基于更简单功能的自然扩展methodName2
注意,这是一种“分而治之”的方法
选项2说明:
我在文件列表中有一个方法methodName
。如果我有一个文件,我可以创建一个文件列表(单个文件)并在上面调用methodName
在这里,我们试图从更复杂的功能中构建更简单的功能,从而创建单个文件列表
因此,选项1显然更自然
最好是测试某个东西在一件事情上有效,然后您可以确定它在这些事情的列表上也有效。我不确定您所说的选项2是什么意思。您能为每个选项提供代码示例吗?谢谢。增加了一些例子,所以我的意思很清楚。。可能从一开始就应该这么做。你说“通过改变参数other,var args是不受欢迎的”是什么意思?其他是什么?我很不确定你所说的选项2是什么意思。您能为每个选项提供代码示例吗?谢谢。增加了一些例子,所以我的意思很清楚。。可能从一开始就应该这么做。你说“通过改变参数other,var args是不受欢迎的”是什么意思?还有什么?抱歉忘了在问题中添加此方法不可取的内容。@Manguratt更新答案,并提供关于选项1和2的建议道歉忘了在问题中添加此方法不可取的内容。@Manguratt更新答案,并提供关于选项1和2的建议
public void methodName(int arg2, String... files) {
for (String file: files) {
}
}
public void methodName(String file, int arg2) {
...
}
public void methodName(String[] file, int arg2) {
...
}