用于多个参数的Java varargs

时间:2012-04-23 17:53:58

标签: java optional-parameters

将Java varargs用作可选参数是否被认为是一种很好的编程习惯?

更多:如果我有一个接口,并且某些实现需要附加参数,而有些则不需要,可以在方法签名中使用varargs作为可选参数吗?

在Java中,可以使用以下习语:

public static void x(String ... strings)

获取一个字符串数组,可能为空。你可以用

来调用它
x() (empty array), x("1","2","3") etc

3 个答案:

答案 0 :(得分:2)

我会说没有。使用varargs将允许为可选参数提供任意数量的参数。您将如何与实现您的界面的人沟通或调用您的方法只需要一个值?提供多个值时,行为应该是什么?这些都是不必要的复杂情况。

如果您的方法对可选参数只需要0或1值,则应使用仅允许提供0或1值的语言构造。重载方法签名或允许可选参数为null更合适。

答案 1 :(得分:1)

当您不知道api的用户想要传递的“特定类型”的参数数量时,通常会使用Varargs。我认为没有任何问题,因为用户可以决定传递任意数量的参数,或者根本不传递任何参数。例如

public class NewClass {

    public void print(String... a) {
        System.out.println(a);
    }

    public static void main(String[] args) {
        new NewClass().print();
    }
}

不要受伤。因为你知道varargs中的类型。

答案 2 :(得分:0)

我认为使用varargs实现可选参数并不是一个好主意。

Animal a = new Dog();
a.speak("bow");

您不知道在上面的示例中查看应该应用哪些参数的参考,因为如果动物是从动物列表中提取的,您可能不知道它是狗。

如@Oli所说,显式重载是一种很好的方法。