У меня есть некоторый код, чтобы создать экземпляр класса случайный, как это:Использование ClassTag/TypeTag вместо ClassManifest в Scala 2.10
trait T
class A extends T
class B extends T
class C extends T
def createRandomT = {
val choices = Vector(classOf[A], classOf[B], classOf[C])
val cls = new scala.util.Random().shuffle(choices).head
instantiateT(cls)
}
def instantiateT(cls: Class[_ <: T]) = {
ClassManifest.fromClass(cls) match {
case c if c <:< classManifest[A] => new A
case c if c <:< classManifest[B] => new B
case c if c <:< classManifest[C] => new C
}
}
Это работает, но после обновления до 2.10 instantiateT
дает различные предупреждения устаревания.
Любые подсказки о том, как реплицировать функциональность ClassTag
и/или TypeTag
?
Edit: Как отметил Даниил это работает:
cls match {
case c if c.isAssignableFrom(classOf[A]) => new A
case c if c.isAssignableFrom(classOf[B]) => new B
case c if c.isAssignableFrom(classOf[C]) => new C
}
Doh, конечно. Благодаря! – hezamu