这种类型参数语法不能编译的原因是什么?

edd*_*ndo 6 generics types scala scala-2.10

说我有:

class Class[CC[A, B]]
class Thing[A, B <: Int]
class Test extends Class[Thing] // compile error here
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

类型参数(cspsolver.Thing)的类型不符合类Class中类型参数(类型CC)的预期种类.cspsolver.
Thing的类型参数与CC类型的预期参数不匹配:类型C的边界<:Int比类型B的声明边界更严格>:Nothing <:Any

但是,当我修改代码时,它看起来像这样:

class Class[CC[A, B]]
class Thing[A, B] {
  type B <: Int
}
class Test extends Class[Thing]
Run Code Online (Sandbox Code Playgroud)

它编译得很好.它们在功能上是否相同?

Pet*_*lák 1

原因在编译器消息中给出。在Class您期望不受限制的情况下CC,同时Thing具有第二个类型参数必须是的限制<: Int。一种可能性是添加相同的约束,Class

class Class[CC[A,B <: Int]]
class Thing[A, B <: Int]
class Test extends Class[Thing]
Run Code Online (Sandbox Code Playgroud)