Я использую отражение в scala, и я хочу обобщить код для приведения объекта для возврата типа другого метода, который идентифицируется во время выполнения с использованием отражения
Я попытался получить возвращаемый тип метода с помощью отражения, но не смог использовать это в операции приведения asInstance [].
import java.lang.reflect.Modifier
object Test5 {
def main(args: Array[String]): Unit = {
val runtimeClass = Class.forName("ConvertToUpper")
invokeRuntimeMethod(runtimeClass, "toUpper")
}
def invokeRuntimeMethod(runtimeClass: Class[_], methodName: String): Unit = {
val runtimeMethod = runtimeClass.getDeclaredMethod(methodName)
var runtimeClsConstructor: java.lang.reflect.Constructor[_] = null
if (!Modifier.isStatic(runtimeMethod.getModifiers)) {
runtimeClsConstructor = runtimeClass.getDeclaredConstructor()
runtimeClsConstructor.setAccessible(true)
}
println("Return Type =>" + runtimeMethod.getReturnType)
println("Generic Return Type => " + runtimeMethod.getGenericReturnType)
runtimeMethod.setAccessible(true)
val runtimeObj = if (runtimeClsConstructor != null) runtimeClsConstructor.newInstance()
else runtimeClsConstructor
val runtimeFunction = runtimeMethod.invoke(runtimeObj).asInstanceOf[Function1[String, String]]
println("output => " + runtimeFunction("test"))
}
}
Здесь я хочу обобщить функцию, чтобы мне не нужно было писать Function1. Я уже получаю возвращаемый тип, то есть Generic Return Type => scala.Function1. Как я могу использовать этот возвращаемый тип в asInstanceOf напрямую вместо жесткого кодирования Function1, например runtimeMethod.invoke (runtimeObj) .asInstanceOf [runtimeMethod.getGenericReturnType]
Any => Any
. - Могу я спросить, каков ваш вариант использования? Каким должен быть общий? И зачем вам вообще понадобилась рефлексия? - person Luis Miguel Mejía Suárez   schedule 25.07.2019