给定的类
sealed abstract class A
case class B(param: String) extends A
case class C(param: Int) extends A
trait Z {}
class Z1 extends Z {}
class Z2 extends Z {}
def zFor[T <: A : Manifest]: Option[Z] = {
val z = manifest[T].erasure
if (z == classOf[B]) {
Some(new Z1)
} else
if (z == classOf[C]) {
Some(new Z2)
} else {
None
}
}
我认为这里模式匹配的问题是无法在字节码中构建模式匹配表。有没有解决这个问题的方法?可能我可以使用编译器在 Manifest 中生成的一些 Int 吗?