我正在尝试定义一个结构类型,它定义了任何具有“add”方法的集合(例如Java集合)。使用这个类型,我想定义一些针对特定集合操作的高阶函数。
这段代码无法编译,会出现以下错误。
我尝试将参数从GenericCollection中移除,并将其放在方法上:
但是我得到了另一个错误:
object GenericTypes {
type GenericCollection[T] = { def add(value: T): java.lang.Boolean}
}
import GenericTypes._
trait HigherOrderFunctions[T, CollectionType[X] <: GenericCollection[X]] {
def map[V](fn: (T) => V): CollectionType[V]
....
}
class RichJList[T](list: List[T]) extends HigherOrderFunctions[T, java.util.List]
这段代码无法编译,会出现以下错误。
error: Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
我尝试将参数从GenericCollection中移除,并将其放在方法上:
object GenericTypes {
type GenericCollection = { def add[T](value: T): java.lang.Boolean}
}
import GenericTypes._
trait HigherOrderFunctions[T, CollectionType[X] <: GenericCollection]
class RichJList[T](list: List[T]) extends HigherOrderFunctions[T, java.util.List]
但是我得到了另一个错误:
error: type arguments [T,java.util.List] do not conform to trait HigherOrderFunctions's type parameter bounds [T,CollectionType[X] <: org.scala_tools.javautils.j2s.GenericTypes.GenericCollection]
有人能给我一些关于如何在Scala中使用结构类型和抽象类型参数的建议吗?或者如何实现我想要的目标?非常感谢!