Scala自定义MyLinkedHashMap的两类报错原因咨询
Scala自定义MyLinkedHashMap的两个问题解答
问题1:创建Node实例时参数过多的错误原因
- 当Node作为
MyLinkedHashMap的普通内部类时,Scala会默认让内部类与外部类的实例绑定,此时Node的构造函数会隐式要求传入一个MyLinkedHashMap的实例作为参数,但你创建Node时只传了key、value、next这些显式参数,编译器就会判定参数数量不匹配,抛出「Too many arguments for constructor Node」错误。 - 把Node放到
MyLinkedHashMap的伴生object里后,Node就变成了独立的顶层类,不再依赖外部类的实例,构造函数里没有那个隐式参数,你传的参数数量刚好符合定义,所以错误消失。
问题2:Node必须声明为抽象类的原因
- 这个错误的核心是你的Node类继承了带有抽象成员
next: Node[K, V]的父类型(比如自定义的抽象链表节点特质或抽象类),但你没有在非抽象的Node类中为next提供具体实现。 - Scala的语法规则明确:非抽象类继承抽象成员后,必须在类内实现该成员(比如用
var next: Node[K, V] = null直接初始化),或者将自身声明为抽象类,把实现延迟到子类。如果既不实现抽象成员,又不声明为抽象类,编译器就会触发这个强制提示错误。
内容的提问来源于stack exchange,提问作者Ravi Mounika
相关产品推荐
相关产品推荐

