函数的可变长度参数列表?

时间:2013-05-20 14:41:05

标签: java

我收到的Java库有一个具有以下功能的类。我之前从未使用过这种类型的函数,因此我不确定它的名称或使用方法。

class SomeTree {

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

如果我错了,请纠正我,但该方法会接受多个参数,对吗? 如果我事先不知道参数的数量,我该怎么称呼它?

假设我有一个“Node [] nodeArray”传递给setNode()。我该怎么做?

5 个答案:

答案 0 :(得分:2)

正确,它将接受以逗号分隔的任意数量的Node参数,或者它将采用Node数组。

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

OR

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

答案 1 :(得分:1)

编译器会自动为您调整(数组到var-args)。

您需要做的只是将数组作为唯一参数传递。

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

答案 2 :(得分:1)

是的,它将接受任意数量的Node实例。 (这有var args)所以你可以在调用方法时简单地传递数组或节点列表,如下所示。

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

答案 3 :(得分:1)

它被称为varargs语法。它允许您传递指定类型的0-n参数。

在方法中,参数是指定类型的数组,如果没有传入参数,则长度为零(即不是null)。

你这样称呼它:

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

答案 4 :(得分:0)

这称为varargs,如果需要,节点将转换为数组。所以你可以调用setNode(n1,n2)或setNode(arrayOfNodes)