Scala自定义继承Set的集合:SetOps类型参数修改遇阻
自定义Scala可变Set集合的类型参数调整问题
这是此前「如何在Scala中创建继承Set的自定义集合」问题的跟进。我已经实现了一个继承自mutable.Set的基础类TestSet,filter、collect等多数方法都能正常运行(代码如下)。原本打算将SetOps的类型参数从mutable.SetOps[A, mutable.Set, TestSet[A]]修改为mutable.SetOps[A, TestSet, TestSet[A]],但在重定义iterableFactory时遇到了困难。
可运行代码片段:
import scala.collection._ class TestSet[A] extends mutable.Set[A] with mutable.SetOps[A, mutable.Set, TestSet[A]] { private var data = mutable.Set.empty[A] override protected def fromSpecific(coll: IterableOnce[A]): TestSet[A] = TestSet.from(coll) override protected def newSpecificBuilder: mutable.Builder[A, TestSet[A]] = TestSet.newBuilder override def empty: TestSet[A] = TestSet.empty override def clear(): Unit = { data = mutable.Set.empty } override def subtractOne(elem: A): TestSet.this.type = { data -= elem this } override def addOne(elem: A): TestSet.this.type = { data += elem this } override def contains(elem: A): Boolean = data.contains(elem) override def iterator: Iterator[A] = { data.iterator } } object TestSet { def empty[A] = new TestSet[A] def from[A](source: IterableOnce[A]): TestSet[A] = source match { case pm: TestSet[A] => pm case _ => (newBuilder ++= source).result() } def apply[A](elem: A*): TestSet[A] = from(elem) def newBuilder[A]: mutable.Builder[A, TestSet[A]] = new mutable.GrowableBuilder[A, TestSet[A]](empty) import scala.language.implicitConversions implicit def toFactory[A](self: this.type): Factory[A, TestSet[A]] = new Factory[A, TestSet[A]] { def fromSpecific(it: IterableOnce[A]): TestSet[A] = self.from(it) def newBuilder: mutable.Builder[A, TestSet[A]] = self.newBuilder } }
内容的提问来源于stack exchange,提问作者Usr654789
相关产品推荐
相关产品推荐

