【发布时间】:2012-02-16 14:12:09
【问题描述】:
我有一种情况导致我似乎无法解决的类型不匹配。这是代码的简化版本:
abstract class Msg
trait Channel[M <: Msg] {
def receive(): M
def ack(envelope: M)
}
object ChannelSender {
private var channel : Channel[_ <: Msg] = _
def assignChannel(channel : Channel[_ <: Msg]) = this.channel = channel
def test() {
val msg = channel.receive()
channel.ack(msg) // Type mismatch here
}
}
编译器的错误是:
类型不匹配;找到:msg.type(具有基础类型 com.msgtest.Envelope) 需要:_$1 其中类型 _$1 <: com.msgtest.envelope>
我可以进行哪些更改才能使其正常工作?此外,这些更改需要编译以下具体实现:
class SomeMsg extends Msg
object SomeChannel extends Channel[SomeMsg] {
def receive(): SomeMsg = { null.asInstanceOf[SomeMsg] }
def ack(envelope: SomeMsg) {}
}
object Setup {
ChannelSender.assignChannel(SomeChannel)
}
【问题讨论】: