4
爲了避免在對參數化類進行子類化時重複類型參數信息,我試圖重寫一些代碼以使用抽象類型。與抽象類型交換類型參數
我想什麼來表達類似:
class Group[A]
abstract class Thing[A, G <: Group[A]] {
val group: G
}
class SomeGroup[A] extends Group[A] { g =>
object SomeThing extends Thing[A, SomeGroup[A]] {
val group = g
}
}
使用抽象類型,我的最好的嘗試,到目前爲止是:
class Group {
type A
}
abstract class Thing { t =>
type A
type G <: Group { type A = t.A }
val group: G
}
class SomeGroup extends Group { g =>
object SomeThing extends Thing {
type A = g.A
type G = SomeGroup { type A = g.A }
val group = g
}
}
但是,我得到一個編譯器錯誤最後一行說「價值組具有不兼容的類型」。
如何使用抽象類型編寫第一個示例?
這比我想象的要簡單。 :)爲什麼這裏有必要的任何好理由? – 2011-12-23 19:10:03
我會想象沒有任何幫助,類型檢查器會將'g'的類型看作「SomeGroup」,除非使用類型註釋,否則這就是分配給'group'的類型。儘管如此,不要聽我的話。 – Philippe 2011-12-23 19:14:45