我收到了一個具有以下功能的類的Java庫。我從來沒有使用過這種類型的函數,因此我不確定它是什麼或者如何使用它。可變長度參數列表的功能?
class SomeTree {
public void setNode (Node... nodes) {
}
}
糾正我,如果我錯了,但該方法將接受多個參數,對嗎? 如果我事先不知道參數的數量,我將如何調用它?
假設我有一個「Node [] nodeArray」傳遞給setNode()。我會怎麼做?
我收到了一個具有以下功能的類的Java庫。我從來沒有使用過這種類型的函數,因此我不確定它是什麼或者如何使用它。可變長度參數列表的功能?
class SomeTree {
public void setNode (Node... nodes) {
}
}
糾正我,如果我錯了,但該方法將接受多個參數,對嗎? 如果我事先不知道參數的數量,我將如何調用它?
假設我有一個「Node [] nodeArray」傳遞給setNode()。我會怎麼做?
編譯器做的適應化(數組VAR-參數)爲您自動。
所有你需要做的只是傳遞你的數組作爲唯一的參數。
Node[] myNodeArray = ........
setNode(myNodeArray);
正確,它會接受用逗號分隔的任意數量的節點參數,否則它將佔用一個節點數組。
Node[] nodes = createNodeArray();
obj.setNodes(nodes);
OR
Node node1 = createNode();
Node node2 = createNode();
obj.setNodes(node1, node2);
這被稱爲varargs,節點將在需要轉換成一個數組。所以你可以直接調用setNode(n1,n2)或setNode(arrayOfNodes)
是的,它會接受任意數量的Node實例。 (這有var參數),所以當你調用方法時,你可以簡單地傳遞數組或節點列表,如下所示。
setNode (nodeArray) or setNode (node1,node2,node3);
它被稱爲varargs語法。它允許您傳遞指定類型的0-n個參數。
在該方法中,該參數是指定類型的數組,如果不傳入任何參數(即不是null
),則該參數的長度爲零。
你這樣稱呼它:
someTree.setNode();
someTree.setNode(someNode);
someTree.setNode(someNode, someOtherNode);
// etc
謝謝大家回答。我今天學到了一些新東西。 – tadpole