我在java中有一个这样的方法,它返回Object
private static Object invokeMethod(Object target, String methodName, Class<?>[] parameterClasses, Object[] paramterValues)
throws IllegalAccessException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class<?> clazz = target.getClass();
Method method = clazz.getDeclaredMethod(methodName, parameterClasses);
return method.invoke(target, paramterValues);
}
当我将它转换为kotlin时,我没有得到如何在kotlin中编写类的数组
我有类似的东西
@Throws(IllegalAccessException::class, NoSuchMethodException::class, IllegalArgumentException::class, InvocationTargetException::class)
private fun invokeMethod(target: Any, methodName: String, parameterClasses: Array<Class<*>>?, paramterValues: Array<Any>?): Any {
val clazz = target.javaClass
val method = clazz.getDeclaredMethod(methodName, *parameterClasses)
return method!!.invoke(target, paramterValues)
}
其中* parameterClasses - &gt;它是kotlin中的扩散函数
答案 0 :(得分:2)
您不能将扩展运算符与Array<Class<*>>?
等可空类型一起使用。请考虑以下更改:
private fun invokeMethod(
target: Any,
methodName: String,
parameterClasses: Array<Class<*>>, //not nullable
parameterValues: Array<Any>?
): Any {
val clazz = target.javaClass
val method = clazz.getDeclaredMethod(methodName, *parameterClasses)
return method!!.invoke(target, parameterValues)
}
答案 1 :(得分:2)
而不是parameterClasses: Array<Class<*>>?
,请尝试此操作
parameterClasses: Array<Class<*>>
您不能在可空类型的参数上使用扩展运算符。
答案 2 :(得分:1)
您不能将扩展运算符与可空类型一起使用,请尝试删除函数参数声明中的所有?
。
private fun invokeMethod(
target: Any,
methodName: String,
parameterClasses: Array<Class<*>>, // notnull
parameterValues: Array<Any> // notnull too
): Any {
val clazz = target.javaClass
val method = clazz.getDeclaredMethod(methodName, *parameterClasses)
return method!!.invoke(target, *parameterValues) // spread operator needed here too
}