我不明白为什么我得到“推断的类型参数不符合类型参数边界”。首先,我定义了一个称为 CS 的特征,它可以由多个类(例如 CS01 和 CS02)实现:
trait CS[+T <: CS[T]] {
this: T =>
def add: T
def remove: T
}
class CS01 extends CS[CS01] {
def add: CS01 = new CS01
def remove: CS01 = new CS01
}
class CS02 extends CS[CS02] {
def add: CS02 = new CS02
def remove: CS02 = new CS02
}
add
这个想法是在调用 CS01和remove
CS02时保持实现的类型。其次,我想定义可以在每个符合 trait CS 的类上执行的操作。然后,我定义了一个名为的特征Exec
(带有两个非常简单的类示例Exec01
并Exec02
混合Exec
特征):
trait Exec {
def exec[U <: CS[U]](x: U): U
}
class Exec01 extends Exec {
def exec[U <: CS[U]](x: U): U = x.add
}
class Exec02 extends Exec {
def exec[U <: CS[U]](x: U): U = x.remove
}
再一次,我需要保留混合CS
特征的类的实现类型。这就是为什么 exec 用[U <: CS[U]]
.
最后,我希望对它的任何CS
启用操作都可以混合 trait Executable
,从而可以执行 trait 之后的操作Exec
:
trait Executable[T <: CS[T]] {
this: T =>
def execute(e: Exec): T = e.exec(this)
}
但是,当我尝试编译时出现以下错误:
error: inferred type arguments [this.Executable[T] with T] do not conform to method exec's type parameter bounds [U <: this.CS[U]]
def execute(e: Exec): T = e.exec(this)
^
我不太明白,因为任何混合的类都Executable
必须是T
具有混合 CS 特征的约束的类型,因为trait Executable[T <: CS[T]]
. 那么,为什么this
不符合类型参数 boundU <: CS[U]
呢?