我想定義一個通用容器,其元素可以返回封閉容器。喜歡的東西:scala中的循環類型參數定義
abstract class Container[E <: Element] { // compile error
def contains(e: E): Boolean
def addNewElement(): Unit
}
abstract class Element[C <: Container] { // compile error
def enclosingContainer(): C
}
class MyContainer extends Container[MyElement] {
private var elements = List[MyElement]()
override def contains(elem: MyElement) = elements.contains(elem)
override def addNewElement() { elements ::= new MyElement(this) }
}
class MyElement(container: MyContainer) extends Element[MyContainer] {
override val enclosingContainer = container
}
但是,這種片段不編譯,因爲我應該在abstract class Container[E <: Element]
定義,並在abstract class Element[C <: Container]
定義一個類型Container
給一個類型參數Element
。
我有一種方法來實現我正在尋找的行爲?是否有適當的聲明Container
和Element
?我應該定義第三方對象嗎?
粗略的估計,因爲我無法打開我的編譯器在一分鐘,但你試過'抽象類要素[C <:容器[元] '或類似的東西? – wheaties 2010-01-13 19:43:43
是的,但是'Element'也需要一個參數類型... – paradigmatic 2010-01-13 19:46:31
不應該'addNewElement()'帶一個元素來添加?那就是'addNewElement(e:E)'? – 2010-01-13 22:54:34