【发布时间】:2013-12-20 06:39:38
【问题描述】:
我不确定我想做的是否可行,但我会先解释原因,然后再解释我要做什么。
我正在使用一个用于进化计算的框架,它本质上是从我将要描述的构造函数中生成一个树结构,其中每个节点都可以有可变数量的子节点。
我正在尝试编写一个通用节点构造函数,该构造函数接受可变数量的参数,这些参数用作该节点的子对象(因此节点可以根据此省略号从 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)。
有没有办法解决这个问题?
【问题讨论】:
-
请提供确切的异常和堆栈跟踪,并标记引发异常的行。是
super电话吗?是在超级构造函数中抛出的吗?其他地方? -
这是一个相当复杂的框架,所以我将其抽象为这个问题。如所示,它是一个 ArrayStoreException,基本上是试图将
Node变量设置为Node[]。据我了解,问题是通过将数组传递给超级构造函数,我实际上是在传递Node[]而不是单独的节点变量。
标签: java oop constructor ellipsis