在哈希集的实现中有一些奇怪的编译错误。这段代码
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] = {
^我怎么才能治好他们?
发布于 2014-07-31 09:18:04
要重写的方法是HashSet.+=,它具有以下定义:
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) = ???
}https://stackoverflow.com/questions/25054044
复制相似问题