答え 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")