3

JavaリフレクションAPIを使用して、メソッドのパラメータータイプのリストを取得するには、単純に使用できますgetParameterTypes

次に例を示します。

scala> classOf[String].getMethods.head.getParameterTypes

res8: Array[Class[_]] = Array(class java.lang.Object)

新しいScala2.10Reflection APIを使用して同じ結果を得るベストプラクティスは何ですか?

4

1 に答える 1

11

Scala リフレクションはより多くのことを行い、より多くを必要とするため、より困難です。例えば:

  • タイプは消去されません。クラスは消去されますが、型は消去されません。
  • Scala は名前付きパラメーターをサポートしているため、パラメーターの名前が必要です。
  • Scala には、パラメーター リストのないメソッドがあります。

それで、すべてを考えると、これがあなたのやり方です。まず、メソッドを取得します。

val stringMethods: Iterable[MethodSymbol] = typeOf[String].members.collect { 
  case m if m.isMethod => m.asMethod 
}

Scala リフレクションは (まだ) 特定の種類のメンバー (メソッド、フィールド、内部クラスなど) をリストするメソッドを提供していないため、一般的なmembersメソッドを使用する必要があります。

すべての種類のメンバーに対して機能するこのメソッドは、すべてのシンボルの最大公約数membersである の iterable を返すため、結果のシンボルをメソッドとして扱うには にキャストする必要があります。SymbolMethodSymbol

MethodSymbolがあり、引数の型が必要だとしましょう。できるよ:

method.paramss
于 2012-07-20T23:01:33.213 に答える