Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法设计方法,其中方法为参数获取可变数量的值_Java_Arrays_List_Oop_Design Patterns - Fatal编程技术网

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) {
...
}

让我们假设有相同的可能性,它将采取单一或列表的文件。在没有其他限制的情况下,这种情况的最佳设计方法是什么

  • 创建方法1并在其周围编写包装器来处理文件列表
  • 创建方法2并编写包装器来处理单个文件实例
  • 通过数组接受单个和多个参数
  • 通过args时,选项3似乎有点粗糙;必须为单个实例创建数组

  • 也许是另一种方法。假设通过更改其他参数,var args是不受欢迎的

  • <> 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) {
        ...
    }