Указанные классышаблон матч на проявленных экземпляров запечатанного класса
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
}
}
Я думаю, что проблема с совпадающими здесь картина является невозможность построить шаблон сопоставления таблицы в байткод. Существует ли какое-либо решение этой проблемы? Может быть, я могу использовать некоторый Int, сгенерированный в Manifest компилятором?
Вы видели какой-либо вопрос здесь? Я запустил этот код, и он работал, как ожидалось. Вы должны изменить 'erasure' на' runtimeClass' (если используете Scala 2.10', но он работал в обоих направлениях. – cmbaxter