我有下一个字段:
var operations = Map.empty[Long, _ <: Operation]
我想获得第二个泛型参数上限扩展Operation
类。当我在上面做的时候,我有错误unbound wildcard type
。
我怎样才能做到这一点?
答案 0 :(得分:2)
Map定义为trait Map[A, +B]
,因此Operation
是协变的 - 在此示例中为上限类型。
只需说Map.empty[Long, Operation]
答案 1 :(得分:1)
我将解决手头的实际错误。尽管不必要,如果您按照以下方式定义将
。var operations: Map[Long, _ <: Operation] = Map.empty // Or some Map that conforms
不同之处在于,在上面的代码中,我们说operations
的类型为Map[Long, _ <: Operation]
- 这是一张从Long
到的某种类型的地图,我们不知道关心,只要它在Operation
之上。但是Map.empty
是一个方法调用,它希望一些实际类型作为类型参数提供(或者推断为Nothing
)而不是存在性。
当然,这都是不必要的,因为Map
对其第二个类型参数是协变的。这意味着,如果您有一些Z
Operation
的子类型,则Map[Long, Z]
是Map[Long, Operation]
的子类型。