我正在尝试定义一个结构类型,定义任何具有“add”方法的集合(例如,java 集合)。使用它,我想定义一些对某个集合进行操作的高阶函数
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 中使用带有抽象类型参数的结构类型的建议?或者如何实现我想要实现的目标?非常感谢!