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)
它编译得很好.它们在功能上是否相同?
原因在编译器消息中给出。在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)