abstract class Box {
type T <: String
}
type InvariantBox = Box { type T = AnyRef } // compiles
abstract class Box2 extends Box {
type T = AnyRef //Error:overriding type T in class
// Box with bounds <: String; type T
// has incompatible type type T = AnyRef
}
为什么可以在InvariantBox中重新定义T
类型的参数,但在Box2
中不允许这样做?
答案 0 :(得分:1)
因为您有权创建交点
type HasT = { type T = AnyRef }
type InvariantBox = Box with HasT
否则,对于任何类型的A
,B
,您都不能创建类型A with B
。
对于类来说,有最重要的规则。
Scala允许定义类型,不包含任何值或仅包含null
值。