回答 1。
总的来说,我强烈反对反思。但是,如果你真的想这样做,在 Scala 2.9.1 中你可以使用 Manifest
def create[T:Manifest](name:String) = {
val klass:Class[_] = t.erasure
}
在 scala 2.10 中,你应该看看 TypeTag。
回答 2。
但是,正如我已经说过的,正确的方法不是使用类,而是使用隐式构建器
trait Builder[T]{
def build(name:String):T
}
def create[T](name:String)(implicit builder:Builder[T]) = {
builder.build(name)
}
这样,您可以通过仅在范围内导入正确的隐式来限制您可以创建的内容,您不会依赖反射,也不会冒险获得可怕的 RuntimeExceptions
发表评论回答
如果您的目的是避免在每次调用时调用 getClass,您可以执行以下操作
def create(name:String)(implicit klass:Class[_]) {
}
你可以这样称呼它
implicit val klass1 = myInstance.getClass
create("hello")
create("goodbye")