使用 Java 反射 API 来获取我们可以简单使用的方法的参数类型列表getParameterTypes
。
这是一个例子:
scala> classOf[String].getMethods.head.getParameterTypes
res8: Array[Class[_]] = Array(class java.lang.Object)
使用新的 Scala 2.10 反射 API 获得相同结果的最佳实践是什么?
使用 Java 反射 API 来获取我们可以简单使用的方法的参数类型列表getParameterTypes
。
这是一个例子:
scala> classOf[String].getMethods.head.getParameterTypes
res8: Array[Class[_]] = Array(class java.lang.Object)
使用新的 Scala 2.10 反射 API 获得相同结果的最佳实践是什么?
这更困难,因为 Scala 反射做得更多,需要更多。例如:
所以,考虑到这一切,这就是你如何做到的。首先,获取方法:
val stringMethods: Iterable[MethodSymbol] = typeOf[String].members.collect {
case m if m.isMethod => m.asMethod
}
Scala 反射还没有提供列出特定类型成员(方法、字段、内部类等)的方法,因此您需要使用通用members
方法。
该方法适用于所有类型的成员,它members
返回一个可迭代的 of Symbol
,这是所有符号的最大公分母,因此您需要强制转换MethodSymbol
为将生成的符号视为方法。
现在,假设我们有一个MethodSymbol
,并且我们想要参数的类型。我们可以完成这个:
method.paramss