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]]) 
}