我想定义一个通用容器,其元素可以返回封闭容器。喜欢的东西: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