我們知道在Scala中可以通過extends
關鍵字後調用構造函數初始化一個單身object
的超類的實例,像這樣以相當特殊的方式實施,將其構建方法委託給伴侶對象。如果我想Obj
擴展Set的某個實例會怎麼樣?起初我天真地想寫:斯卡拉對象擴展設置實例
object Obj extends Set[Int](1, 2, 3, 4)
但是,編譯器抱怨,把我的心給我擺在這裏的問題。我誤會了一些基本的Scala層次結構設計規則?
編輯:我正在公開我的用例,以澄清爲什麼我覺得需要子類Set。
trait Group[A] extends Set[A] {
def add(x: A, y: A): A
val zero: A
def inverse(x: A): A
}
class CyclicElement(v: Int) {
val value = v % 4
override def equals(x: CyclicElement) = value == x.value
}
object CyclicElement {
def apply(v: Int) = new CyclicElement(v)
}
object CyclicGroup extends Set[CyclicElement](Zero, A, B, C) with Group[CyclicElement] {
override def add(x: CyclicElement, y: CyclicElement) = CyclicElement(x.value + y.value)
override val zero = CyclicElement(0)
override def inverse(x: CyclicElement) = CyclicElement(4 - x.value)
}
1)'immutable.Set'是一個特徵,因此沒有構造函數。 2)通用混凝土不可變實現'TreeSet'和'HashSet'具有私有構造函數,並且'deprecatedInheritance'帶有註釋'「<...>集合的實現細節使得它們不能繼承。」' – Kolmar