2

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

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

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

public static void x(String ... strings)

它得到一个字符串数组,可能是空的。你可以用

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

3 回答 3

2

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

public class NewClass {

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

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

不要伤害。因为您知道可变参数中的类型。

于 2012-04-23T18:01:58.977 回答
2

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

如果您的方法需要 0 或 1 个值作为可选参数,那么您应该使用只允许提供 0 或 1 个值的语言结构。重载方法签名或允许可选参数为空会更合适。

于 2012-04-23T18:33:12.317 回答
0

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

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

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

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

于 2012-04-23T17:59:55.150 回答