3

私はscala リフレクションの概要java.lang.Class<T>を見ていましたが、Scala 2.10 で a を Type として使用できるかどうか疑問に思っています。

import scala.reflect.runtime.{ universe => ru }

class Reflector {
  def getType: ru.Type = {
    ru.typeOf[java.lang.String]
  }
  def getType[T](clazz: Class[T]): ru.Type = {
    //is it possible to implement me?
  }
}

parse[T](clazz: Class[T]): ru.Typeを使用してJavaから呼び出すことができるようにするために、署名を変更せずにメソッドを実装することは可能new Reflector().parse(String.class)ですか?

4

1 に答える 1

7

次のようにメソッドを実装できます。

def getType[T](clazz: Class[T])(implicit runtimeMirror: ru.Mirror) =
  runtimeMirror.classSymbol(clazz).toType

そして、次のように呼び出します。

implicit val mirror = ru.runtimeMirror(getClass.getClassLoader)
getType(classOf[String])

同様のメソッドが含まれているsmirror ライブラリに興味があるかもしれません。

def sClassOf[T](clazz: Class[T])(implicit runtimeMirror: Mirror): SClass[T]

プロパティSClassが含まれる場所。typ


編集

メソッドをこれに変更することをお勧めします (同じ署名を保持します)。

def getType[T](clazz: Class[T]):ru.Type = {
  val runtimeMirror =  ru.runtimeMirror(clazz.getClassLoader)
  runtimeMirror.classSymbol(clazz).toType
}
于 2013-02-25T13:48:10.533 に答える