Scala 实现HashSet
我在哈希集的实现中出现了一些奇怪的编译错误。此代码Scala 实现HashSet,scala,Scala,我在哈希集的实现中出现了一些奇怪的编译错误。此代码 class HashSet[A] extends scala.collection.mutable.Set[A] { override def +=(elem: A): HashSet[A] = { /* doing stuff */ this } } 产生以下错误 Error:(15, 16) overriding method += in trait SetLike of type (elem: A)HashSet
class HashSet[A] extends scala.collection.mutable.Set[A] {
override def +=(elem: A): HashSet[A] = {
/* doing stuff */
this
}
}
产生以下错误
Error:(15, 16) overriding method += in trait SetLike of type (elem: A)HashSet.this.type;
method += has incompatible type
override def +=(elem: A): HashSet[A] = {
^
Error:(15, 16) overriding method += in trait Builder of type (elem: A)HashSet.this.type;
method += has incompatible type
override def +=(elem: A): HashSet[A] = {
^
Error:(15, 16) overriding method += in trait Growable of type (elem: A)HashSet.this.type;
method += has incompatible type
override def +=(elem: A): HashSet[A] = {
^
如何修复它们?您要覆盖的方法是,它具有以下定义:
def +=(elem: A): HashSet.this.type
返回类型是HashSet.this.type。您正在使用一个返回不同类型的方法重写它,HashSet[a]
。这是不允许的
换句话说:突变可变集合不应只返回任何相同类型的集合,而应返回完全相同的集合(即this
)。您在方法中正确地返回了this
,但您可以使返回类型更精确,以明确地声明您不仅返回了任何HashSet
,还返回了此HashSet
:
class HashSet[A] extends scala.collection.mutable.Set[A] {
override def +=(elem: A): this.type = ???
override def iterator: Iterator[A] = ???
override def -=(elem: A): this.type = ???
override def contains(elem: A): Boolean = ???
}
由于您正在用返回类型this.type
重写一个方法,因此简单地让Scala推断返回类型也可以:
class HashSet[A] extends scala.collection.mutable.Set[A] {
override def +=(elem: A) = ???
override def iterator = ???
override def -=(elem: A) = ???
override def contains(elem: A) = ???
}