亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您什么時候在Java中使用varargs?

您什么時候在Java中使用varargs?

楊__羊羊 2019-06-26 16:13:06
您什么時候在Java中使用varargs?我怕瓦拉格。我不知道該用它們做什么。另外,讓人們隨心所欲地表達自己的觀點是危險的。什么是一個上下文的例子,將是一個很好的地方使用它們?
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

一個好的經驗法則是:

“將varargs用于任何需要T數組(無論類型為T)的方法(或構造函數)作為輸入”。

這將使對這些方法的調用更容易(不需要這樣做)。new T[]{...}).

可以將此規則擴展為包含具有List<T>參數,只要此參數僅用于輸入(即列表不被方法修改)。

此外,我不想使用f(Object... args)因為它滑向了使用不明確的API的編程方式。

就例子而言,我在

在上面的代碼中,add()方法被定義為add(JComponent... components).

最后,這些方法的實現必須考慮到這樣一個事實,即可以用空vararg調用它!如果您想至少提出一個論點,那么您必須使用一個丑陋的技巧,例如:

void?f(T?arg1,?T...?args)?{...}

我認為這個技巧很難看,因為方法的實現要比T... args在它的論點列表中。

希望這有助于澄清關于varargs的觀點。


查看完整回答
反對 回復 2019-06-26
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

我經常使用varargs輸出日志以進行調試。

幾乎我的應用程序中的每個類都有一個方法調試器Print():

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);

當我確信我的代碼工作正常時,我會注釋掉調試器Print()方法中的代碼,這樣日志就不會包含太多無關和不想要的信息,但是我可以不對每個調用進行注釋。稍后,如果我發現了一個bug,我只需取消對調試器Print()代碼的注釋,而我對調試器Print()的所有調用都會被重新激活。

當然,我也可以很容易地避開varargs,做以下事情:

private void debugPrint(String msg) {
    System.out.println(msg);}debugPrint("for assignment " + hwId + ", student " + studentId + ", question "
    + serialNo + ", the grade is " + grade);

但是,在本例中,當我注釋出調試器Print()代碼時,服務器仍然要經歷將每次調用中的所有變量連接到調試器Print()中的麻煩,即使對結果字符串不做任何操作。但是,如果我使用varargs,服務器只需將它們放在一個數組中,它就會意識到它不需要它們。節省了很多時間。


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 426 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號