将Java varargs用作可选参数是否被认为是一种很好的编程习惯?
更多:如果我有一个接口,并且某些实现需要附加参数,而有些则不需要,可以在方法签名中使用varargs作为可选参数吗?
在Java中,可以使用以下习语:
public static void x(String ... strings)
获取一个字符串数组,可能为空。你可以用
来调用它x() (empty array), x("1","2","3") etc
答案 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所说,显式重载是一种很好的方法。