你什么时候在Java中使用varargs?
2022-08-31 06:13:20
我害怕瓦拉格。我不知道该用它们做什么。
另外,让人们随心所欲地通过尽可能多的论点感觉很危险。
什么是使用它们的好地方的上下文示例?
我害怕瓦拉格。我不知道该用它们做什么。
另外,让人们随心所欲地通过尽可能多的论点感觉很危险。
什么是使用它们的好地方的上下文示例?
Varargs对于任何需要处理不确定数量对象的方法都很有用。一个很好的例子是String.format
。格式字符串可以接受任意数量的参数,因此您需要一种机制来传入任意数量的对象。
String.format("This is an integer: %d", myInt);
String.format("This is an integer: %d and a string: %s", myInt, myString);
一个好的经验法则是:
“对于需要 T 数组(无论 T 类型如何)作为输入的任何方法(或构造函数),请使用 varargs”。
这将使对这些方法的调用更容易(无需这样做)。new T[]{...}
您可以扩展此规则以包含带有参数的方法,前提是此参数仅用于输入(即,该方法不修改列表)。List<T>
此外,我会避免使用,因为它滑向了API不明确的编程方式。f(Object... args)
在示例方面,我在DesignGridLayout中使用它,我可以在一次调用中添加几个s:JComponent
layout.row().grid(new JLabel("Label")).add(field1, field2, field3);
在上面的代码中,add() 方法定义为 。add(JComponent... components)
最后,这些方法的实现必须注意这样一个事实,即它可能被调用一个空的vararg!如果你想强加至少一个论点,那么你必须使用一个丑陋的技巧,例如:
void f(T arg1, T... args) {...}
我认为这个技巧很丑陋,因为该方法的实现将不如仅在其参数列表中简单。T... args
希望这有助于澄清关于varargs的观点。