如何为此方法进行Kotlin转换

时间:2018-06-14 05:55:32

标签: kotlin

我在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中的扩散函数

Bluetooth Wrapper Gists

3 个答案:

答案 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
}