簡體   English   中英

可變長度參數列表起作用?

[英]Variable length argument list to function?

我收到了一個Java庫,該庫具有帶有以下功能的類。 我以前從未使用過這種類型的功能,所以我不確定它叫什么或如何使用。

class SomeTree {

      public void setNode (Node... nodes) {
      }  
   }

如果我錯了,請糾正我,但是該方法將接受多個參數,對嗎? 如果我事先不知道參數的數量,該怎么稱呼它?

假設我有一個“ Node [] nodeArray”傳遞給setNode()。 我該怎么做?

正確,它將接受以逗號分隔的任意數量的Node參數,或者將使用Node數組。

Node[] nodes = createNodeArray();
obj.setNodes(nodes);

要么

Node node1 = createNode();
Node node2 = createNode();
obj.setNodes(node1, node2);

編譯器會自動為您進行調整(數組到var-args)。

您需要做的只是將數組作為唯一參數傳遞。

Node[] myNodeArray = ........  
setNode(myNodeArray);

是的,它將接受任意數量的Node實例。 (具有var args),因此您可以在調用方法時簡單地傳遞數組或節點列表,如下所示。

setNode (nodeArray) or setNode (node1,node2,node3);

它稱為varargs語法。 它允許您傳遞指定類型的0-n參數。

在該方法內,參數是指定類型的數組,如果不傳入任何參數(即不為null ),則其長度為零。

您這樣稱呼它:

someTree.setNode();
someTree.setNode(someNode);
someTree.setNode(someNode, someOtherNode);
// etc

這稱為varargs ,如果需要,節點將轉換為數組。 所以你可以只調用setNode(n1,n2)或setNode(arrayOfNodes)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM