3 回答

TA贡献1794条经验 获得超8个赞
一个好的经验法则是:
“将varargs用于任何需要T数组(无论类型为T)的方法(或构造函数)作为输入”。
这将使对这些方法的调用更容易(不需要这样做)。new T[]{...}
).
可以将此规则扩展为包含具有List<T>
参数,只要此参数仅用于输入(即列表不被方法修改)。
此外,我不想使用f(Object... args)
因为它滑向了使用不明确的API的编程方式。
就例子而言,我在设计GridLayout,我可以在这里添加几个JComponent
S一次呼叫:
layout.row().grid(new JLabel("Label")).add(field1, field2, field3);
在上面的代码中,add()方法被定义为add(JComponent... components)
.
最后,这些方法的实现必须考虑到这样一个事实,即可以用空vararg调用它!如果您想至少提出一个论点,那么您必须使用一个丑陋的技巧,例如:
void f(T arg1, T... args) {...}
我认为这个技巧很难看,因为方法的实现要比T... args
在它的论点列表中。
希望这有助于澄清关于varargs的观点。

TA贡献1825条经验 获得超6个赞
private void debugPrint(Object... msg) { for (Object item : msg) System.out.print(item); System.out.println();}
debugPrint("for assignment ", hwId, ", student ", studentId, ", question ", serialNo, ", the grade is ", grade);
private void debugPrint(String msg) { System.out.println(msg);}debugPrint("for assignment " + hwId + ", student " + studentId + ", question " + serialNo + ", the grade is " + grade);
添加回答
举报