用于多个参数的Java varargs

用于多个参数的Java varargs,java,optional-parameters,Java,Optional Parameters,使用Java varargs作为可选参数是否被认为是一种好的编程习惯 更重要的是:如果我有一个接口,有些实现需要额外的参数,而有些则不需要,那么在可选参数的方法签名中使用varargs可以吗 在Java中,可以使用以下习惯用法: public static void x(String ... strings) 它获取字符串数组,可能为空。你可以称之为 x() (empty array), x("1","2","3") etc 我认为使用varargs实现可选参数不是一个好主意 Animal

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

更重要的是:如果我有一个接口,有些实现需要额外的参数,而有些则不需要,那么在可选参数的方法签名中使用varargs可以吗

在Java中,可以使用以下习惯用法:

public static void x(String ... strings)
它获取字符串数组,可能为空。你可以称之为

x() (empty array), x("1","2","3") etc

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

Animal a = new Dog();
a.speak("bow");
你不知道看上面例子中的参考应该应用什么论点,因为如果动物是从动物列表中提取出来的,你可能不知道它是狗


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

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

public class NewClass {

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

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

不痛。因为你知道varargs中的类型。

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


如果您的方法要求可选参数正好为0或1,那么您应该使用只允许提供0或1值的语言构造。重载方法签名或允许可选参数为null更合适。

为什么不使用两个显式重载?您能举个例子说明“varargs”的确切含义吗?第二个参数对于接口的某些实现是必需的,而不是其他实现。该方法总是使用两个参数调用,但是如果特定实例需要一个参数或两个参数,则事先不知道。如果该方法有效,则可以。可选参数是varargs的用例之一。为参数创建数组会有轻微的性能损失,但在99%的情况下,这没什么好担心的。但是,等等,如果总是用两个参数调用它,那么为什么第二个参数是可选的呢?现在你说不通了。