gpt4 book ai didi

scala - scala 中的循环类型参数定义

转载 作者:行者123 更新时间:2023-12-03 18:27:58 26 4
gpt4 key购买 nike

我正在尝试定义一个通用容器,其元素可以返回封闭容器。就像是:

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
}

但是,该代码段无法编译,因为我应该为 Element 提供一个类型参数在 abstract class Container[E <: Element]定义和类型到 Containerabstract class Element[C <: Container]定义。

我有办法实现我正在寻找的行为吗? Container 是否有适当的声明?和 Element ?我应该定义第三方对象吗?

最佳答案

abstract class Container[E <: Element[_]] {
def contains( e: E ): Boolean
def addNewElement(): Unit
}

abstract class Element[C <: Container[_]] {
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
}

关于scala - scala 中的循环类型参数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com