Scala上限为通用字段

时间:2015-05-27 20:58:17

标签: scala

我有下一个字段:

var operations = Map.empty[Long, _ <: Operation]

我想获得第二个泛型参数上限扩展Operation类。当我在上面做的时候,我有错误unbound wildcard type

我怎样才能做到这一点?

2 个答案:

答案 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]的子类型。