scala - 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
可以是KafkaHealthEvent
或SapHealthEvent
。
解决方案
只需调整模式匹配即可:
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
推荐阅读
- python - 是否可以在不强制转换的情况下初始化 float32 或 float16 的随机数组?
- laravel - 如何在下拉列表中显示从数据库中选择的值并使用 Laravel 选择自动用户部门?
- sql - Split_Part 等效于 Kdb+
- couchbase - Couchbase N1QL 查询结果的选择键
- javascript - Vuejs app simple fetch post 只插入 _id 而不是 json
- r - 如何在 R studio 中更新支柱包
- javascript - 将 JSON 响应保存到变量以用于其他函数?
- javascript - 从java脚本调用rest api post服务抛出错误
- html - 调整大小时如何使响应式图像纵横比和高度
- python - 从 numpy ndarray 中删除零行