如何在超类中为成员使用Scala子类构造函数?

时间:2012-05-04 22:56:38

标签: scala constructor superclass

我想从超类(Tree[A])调用子类的构造函数来创建类型APart或{的子类的其他实例{1}})。似乎必须有一种比创建中间方法Project的方法更好的方法,因为newChild之类的东西可以工作。我听说CanBuildFrom可能会解决这个问题。

从工作代码中提取:

List

在超类中为成员使用Scala子类构造函数的更好方法是什么?

2 个答案:

答案 0 :(得分:1)

你正在向后看。创建对象时,会调用其构造函数;这默认或通过显式调用委托给它的超类的构造函数。你不能从超类的构造函数中调用子类的构造函数,因为它是子类的构造函数,它首先调用了超类的构造函数。

您需要查看您的逻辑,并记住子类的已知方式是 it 正在直接实例化;并不是要将超类实例化为子类作为某种参数,而是将超类实例化为实例化子类的步骤,而超类应该只知道自己的结构,将子类详细信息留给触发的子类构造函数超类。

答案 1 :(得分:0)

据我所知,实现这一目标的唯一方法是使用反射。

我在这里找到了一个教程:http://www.heimetli.ch/java/create-new-instance.html

这样,您可以在超类中获取子类的构造函数,并调用它来创建子类的新实例。

但是,您必须确保您的子类实现具有特定参数列表的构造函数。