抽象类型模式是未经检查的,因为它被擦除消除 [英] abstract type pattern is unchecked since it is eliminated by erasure

查看:32
本文介绍了抽象类型模式是未经检查的,因为它被擦除消除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁能告诉我如何避免下面代码块中的警告:

Could someone tell me how can I avoid the warning in the code block below:

abstract class Foo[T <: Bar]{
  case class CaseClass[T <: Bar](t: T)
  def method1 = {
    case CaseClass(t: T) => println(t)
    csse _ => 
  }
}

这会导致编译器警告:

 abstract type pattern T is unchecked since it is eliminated by erasure
 case CaseClass(t: T) => println(t)
                   ^

推荐答案

您可以使用 ClassTag(或 TypeTag):

You could use ClassTag (or TypeTag):

import scala.reflect.ClassTag

abstract class Foo[T <: Bar : ClassTag]{
  ...
  val clazz = implicitly[ClassTag[T]].runtimeClass
  def method1 = {
    case CaseClass(t) if clazz.isInstance(t) => println(t) // you could use `t.asInstanceOf[T]`
    case _ => 
  }
}

这篇关于抽象类型模式是未经检查的,因为它被擦除消除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆