Scala中键入参数的模式匹配

时间:2019-04-23 21:07:21

标签: scala

嘿,我有以下ADT

 sealed trait MessageContext
 case class ThisMessageContext(...) extends MessageContext
 case class ThatMessageContext(...) extends MessageContext

和另一个类

 case class Message[+T <: MessageContext](...)

现在我有此方法

def doThisOrThat[T <: MessageContext](message: Message[T]) = message match {
    case mThis: Message[ThisMessageContext] = goThisWay(mThis)
    case mThat: Message[ThatMessageContext] = goThatWay(mThat)
}

private def goThisWay(msg: Message[ThisMessageContext]) = { // Some logic here}

private def goThatWay(msg: Message[ThatMessageContext]) = { // Some logic here}

现在,我希望对于Message [ThatMessageContext]我应该去ThatWayWay,但是它的求值结果是第一个。实际上,由于类型擦除,无论我如何处理,它总是会遇到第一种情况。

在这里是否有办法规避类型擦除。 AFAIK ClassTag是我可以使用的东西,但是我不知道它是如何工作的。我也不喜欢将输入框起来的想法。

0 个答案:

没有答案