将ArrayList转换为varargs构造函数的单独参数

时间:2013-12-03 23:51:59

标签: java oop constructor ellipsis

我不确定我想做的事情是否可行,但我会先解释前面的理由,然后再说明我要做的事情。

我正在使用一个进化计算框架,它本质上是从我将要描述的构造函数生成树结构,其中每个节点可以有可变数量的子节点。

我正在尝试编写一个通用节点构造函数,该构造函数接受可变数量的参数,这些参数充当该节点的子对象(因此节点可以根据此省略号从1到子节点)。

如果我要为2个孩子手动完成此操作,我将拥有如下函数,其中super正在调用父类,该父类创建当前节点的整体结构:

public Wrapper(final SageProgram sp, final Node child1, final Node child2) {
        super(child1, child2);
}

但是,正如我所提到的,我想扩展这一点,所以我尝试了以下内容:

public NWrapper(final ArrayList<Node> children) {
        super(children.toArray(new Node[children.size()]));
}

问题是我得到java.lang.ArrayStoreException,因为构造函数中的变量变成了数组类型(Node[])而不是单数类型(Node)。

有什么方法吗?

1 个答案:

答案 0 :(得分:1)

也许不是:

    public NWrapper(final ArrayList<Node> children) 

您可以将对象分解为Node[]个对象和Node个对象。然后在包装器中处理它们。然后shell将类似于以下内容:

    public NWrapper(final ArrayList<Node[]> children_lists, final ArrayList<Node> children)

您仍然需要根据需要处理对超级班级的调用。