2013-05-20 47 views
0

我收到了一個具有以下功能的類的Java庫。我從來沒有使用過這種類型的函數,因此我不確定它是什麼或者如何使用它。可變長度參數列表的功能?

class SomeTree { 

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

糾正我,如果我錯了,但該方法將接受多個參數,對嗎? 如果我事先不知道參數的數量,我將如何調用它?

假設我有一個「Node [] nodeArray」傳遞給setNode()。我會怎麼做?

+0

謝謝大家回答。我今天學到了一些新東西。 – tadpole

回答

1

編譯器做的適應化(數組VAR-參數)爲您自動。

所有你需要做的只是傳遞你的數組作爲唯一的參數。

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

正確,它會接受用逗號分隔的任意數量的節點參數,否則它將佔用一個節點數組。

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

OR

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

這被稱爲varargs,節點將在需要轉換成一個數組。所以你可以直接調用setNode(n1,n2)或setNode(arrayOfNodes)

1

是的,它會接受任意數量的Node實例。 (這有var參數),所以當你調用方法時,你可以簡單地傳遞數組或節點列表,如下所示。

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

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

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

你這樣稱呼它:

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