猿问

你什么时候在Java中使用varargs?

你什么时候在Java中使用varargs?

我害怕varargs。我不知道该怎么用它们。

另外,让人们通过他们想要的许多论点是危险的。

什么是上下文的一个例子,它将是一个使用它们的好地方?


繁星淼淼
浏览 372回答 3
3回答

达令说

一个好的经验法则是:“对任何需要T数组(无论T类型)作为输入的方法(或构造函数)使用varargs”。这将使这些方法的调用更容易(不需要这样做new T[]{...})。您可以扩展此规则以包含带List<T>参数的方法,前提是此参数仅用于输入(即,该方法不修改列表)。另外,我会避免使用,f(Object... args)因为它的API&nbsp;会出现不明确的编程方式。在示例方面,我在DesignGridLayout中使用它,我可以JComponent在一个调用中添加几个s:layout.row().grid(new&nbsp;JLabel("Label")).add(field1,&nbsp;field2,&nbsp;field3);在上面的代码中,add()方法定义为add(JComponent... components)。最后,这些方法的实现必须注意它可以用空的vararg调用它!如果你想强加至少一个参数,那么你必须使用一个丑陋的技巧,例如:void&nbsp;f(T&nbsp;arg1,&nbsp;T...&nbsp;args)&nbsp;{...}我认为这个技巧很难看,因为该方法的实现不如仅仅T... args在其参数列表中那么简单。希望这有助于澄清关于varargs的观点。

烙印99

我经常使用varargs输出到日志以进行调试。几乎我的应用程序中的每个类都有一个方法debugPrint():private&nbsp;void&nbsp;debugPrint(Object...&nbsp;msg)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Object&nbsp;item&nbsp;:&nbsp;msg)&nbsp;System.out.print(item); &nbsp;&nbsp;&nbsp;&nbsp;System.out.println();}然后,在类的方法中,我有如下调用:debugPrint("for&nbsp;assignment&nbsp;",&nbsp;hwId,&nbsp;",&nbsp;student&nbsp;",&nbsp;studentId,&nbsp;",&nbsp;question&nbsp;", &nbsp;&nbsp;&nbsp;&nbsp;serialNo,&nbsp;",&nbsp;the&nbsp;grade&nbsp;is&nbsp;",&nbsp;grade);当我对我的代码正常工作感到满意时,我会在debugPrint()方法中注释掉代码,这样日志就不会包含太多无关和不需要的信息,但是我可以将对debugPrint()的各个调用取消注释。稍后,如果我发现了一个错误,我只需取消注释debugPrint()代码,并重新激活我对debugPrint()的所有调用。当然,我可以轻易地避开varargs并执行以下操作:private&nbsp;void&nbsp;debugPrint(String&nbsp;msg)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(msg);}debugPrint("for&nbsp;assignment&nbsp;"&nbsp;+&nbsp;hwId&nbsp;+&nbsp;",&nbsp;student&nbsp;"&nbsp;+&nbsp;studentId&nbsp;+&nbsp;",&nbsp;question&nbsp;" &nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;serialNo&nbsp;+&nbsp;",&nbsp;the&nbsp;grade&nbsp;is&nbsp;"&nbsp;+&nbsp;grade);但是,在这种情况下,当我注释掉debugPrint()代码时,服务器仍然需要在每次调用debugPrint()时连接所有变量的麻烦,即使对结果字符串没有任何处理。但是,如果我使用varargs,服务器只有在意识到它不需要它们之前才必须将它们放在一个数组中。节省了很多时间。
随时随地看视频慕课网APP

相关分类

Java
我要回答