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 に答える