嘿,我有以下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是我可以使用的东西,但是我不知道它是如何工作的。我也不喜欢将输入框起来的想法。