首页 > 解决方案 > Message[Playground.this.KafkaHealthEvent] 未选中,因为它被擦除消除了

问题描述

我收到以下代码的警告:

sealed trait KafkaHealthEvent
case object KafkaInactiveApproved extends KafkaHealthEvent
case object KafkaActiveApproved extends KafkaHealthEvent


sealed trait SapHealthEvent
case object SapInactiveApproved extends SapHealthEvent
case object SapActiveApproved extends SapHealthEvent


sealed trait ServerHealthStreamer

case object Complete extends ServerHealthStreamer
case class Message[A](msg: A) extends ServerHealthStreamer

val msg: ServerHealthStreamer = Message[KafkaHealthEvent](KafkaActiveApproved)

msg match {
  case Complete => 
    println("Complete")
  case m: Message[KafkaHealthEvent] =>
    println(m.msg)  
}

警告是:

non-variable type argument Playground.this.KafkaHealthEvent in type pattern Playground.this.Message[Playground.this.KafkaHealthEvent] is unchecked since it is eliminated by erasure  

如何解决问题?案例类的类型变量Message可以是KafkaHealthEventSapHealthEvent

标签: scala

解决方案


只需调整模式匹配即可:

msg match {
  case Complete => 
    println("Complete")
  case Message(msg:KafkaHealthEvent) =>
    println(msg)  
  case other => // handle unexpected
}

这是一个解释类型擦除的博客:http://squidarth.com/scala/types/2019/01/11/type-erasure-scala.html


推荐阅读