4

我有以下案例类:

case class Alert[T <: Transport](destination: Destination[T], message: Message[T])

在 Scala 2.9.2 中,以下方法签名编译得很好:

def send(notification: Alert[_]) {
  notification match {
    ...
  }
}

现在在 Scala 2.10.1 中,它无法编译并出现以下错误:

type arguments [_$1] do not conform to class Alert's type parameter bounds [T <: code.notifications.Transport]

为什么是这样?如何修复错误?简单地给出相同的类型界限会send导致更多的编译错误......

更新:查看SIP-18,我不认为原因是我没有启用存在类型,因为 SIP-18 说它只需要非通配符类型,这正是我在这里所拥有的。

4

1 回答 1

2

似乎有错误说存在类型“ _”不限于是Transport. 这可能是首选的解决方案,

trait Transport
trait Destination[T]
trait Message[T]
case class Alert[T <: Transport](destination: Destination[T], message: Message[T])

def send[T <: Transport](notification: Alert[T]) {
  notification match {
    case _ => ()
  }
}

这似乎也有效,

def send(notification: Alert[_ <: Transport])

但我认为最好不要使用存在类型。

于 2013-04-02T16:20:56.527 回答