我想从超类(Tree[A]
)调用子类的构造函数来创建类型A
(Part
或{的子类的其他实例{1}})。似乎必须有一种比创建中间方法Project
的方法更好的方法,因为newChild
之类的东西可以工作。我听说CanBuildFrom可能会解决这个问题。
从工作代码中提取:
List
在超类中为成员使用Scala子类构造函数的更好方法是什么?
答案 0 :(得分:1)
你正在向后看。创建对象时,会调用其构造函数;这默认或通过显式调用委托给它的超类的构造函数。你不能从超类的构造函数中调用子类的构造函数,因为它是子类的构造函数,它首先调用了超类的构造函数。
您需要查看您的逻辑,并记住子类的已知方式是 it 正在直接实例化;并不是要将超类实例化为子类作为某种参数,而是将超类实例化为实例化子类的步骤,而超类应该只知道自己的结构,将子类详细信息留给触发的子类构造函数超类。
答案 1 :(得分:0)
据我所知,实现这一目标的唯一方法是使用反射。
我在这里找到了一个教程:http://www.heimetli.ch/java/create-new-instance.html
这样,您可以在超类中获取子类的构造函数,并调用它来创建子类的新实例。
但是,您必须确保您的子类实现具有特定参数列表的构造函数。