我必须将Java代码转换为Scala并在类型上使用重写。我的Java代码是:

public class StatementNode extends Node {
public StatementNode()
{
    super(NodeType.statement);
}

protected StatementNode(NodeType type)
{
    super(type);
}

我等效的scala代码是:
class StatementNode extends Node(NodeType.statement) {
protected def this(`type`: NodeType) {
super(`type`)
}

适用于Java,但我发现scala不支持super关键字。那么,如何在scala中对类型应用重写?请帮助!让我知道是否需要其他信息。

最佳答案

在Scala中,重载的构造函数必须调用类构造函数的最通用形式,该形式也必须是默认形式。也就是说,您不能为StatementNode设置一个无参数的构造函数,然后再有一个接受NodeType作为参数的重载,而无需调用无参数的默认构造函数(无论如何这是行不通的)。

相反,您可以执行以下操作:

class StatementNode protected (`type`: NodeType) extends Node(`type`) {
    def this() = this(NodeType.statement)
}

您可以将默认构造函数设置为protected并使用NodeType参数,然后提供不带参数的重载来调用主构造函数并将其传递给NodeType.statement。这应该有效地做同样的事情。

无需在Scala中调用super,因为它是通过extends Node(类型)调用的,这就是默认构造函数必须包含最通用形式的参数的原因。

09-13 06:49