Scala 清单#运行时类理解
给定以下Scala 清单#运行时类理解,scala,Scala,给定以下家长和孩子: scala> trait Parent[T] defined trait Parent scala> case class Kid(clazz: Class[_ <: Parent[_]]) warning: there were 1 feature warning(s); re-run with -feature for details defined class Kid scala>trait-Parent[T] 定义性状亲本 scala>case
家长
和孩子
:
scala> trait Parent[T]
defined trait Parent
scala> case class Kid(clazz: Class[_ <: Parent[_]])
warning: there were 1 feature warning(s); re-run with -feature for details
defined class Kid
scala>trait-Parent[T]
定义性状亲本
scala>case-class-Kid(clazz:class[\up>答案是您必须将通过runtimeClass
获得的实例转换为class
的实际实例
例如:
class Foo[A <: Parent[_]](implicit m: scala.reflect.Manifest[A]) {
Kid(m.runtimeClass.asInstanceOf[Class[A]])
}
我认为有一个类似的话题,最近在Scala内部讨论过。以一种问题的方式相关。我认为你必须使用来代替,最近在Scala内部讨论过它(基本上是为什么它没有被键入),你能告诉我类Foo[…]的主体吗
根据您的评论?我认为这将是Kid(m.runtimeClass.asInstanceOf[Class[A]])
如果Foo
有一个A
类型的参数,那么这样做是否更安全:Class Foo[A@KevinMeredith老实说,我不是100确定,我想是的,我从来没有遇到过问题,现在当我查看时也没有发现任何问题。如果我错了,我希望得到纠正。(顺便说一句,如果你使用.getClass
你不需要隐式参数-只是一个旁注)
class Foo[A <: Parent[_]](implicit m: scala.reflect.Manifest[A]) {
Kid(m.runtimeClass.asInstanceOf[Class[A]])
}
class Foo[A <: Parent[_] : reflect.ClassTag] {
Kid(reflect.classTag[A].runtimeClass.asInstanceOf[Class[A]])
}