Kotlin开发易错问题汇总
数组
array(arrayof())参数在传入到参数类型为Object... (vararg)中时,抛wrong number of arguments异常;
原因: 因为需要参数类型为vararg(Object...)长类型,所以当直接把参数 args: Array<out Any>? 传入其中,编译器会认为传入了一个单独的整个数组元素,而不是传入了数组元素;
解决方案: 使用kotlin的伸展操作符*即可,*args 意为将array拆成一个个元素传入;
注意*符号不能跟null,所以需要使用?:操作符判空 ;-> method!!.invoke(obj, *(args ?: emptyArray()))
当书写动态代理时,可能会抛
method.invoke(iam, *args) must not be null异常;
原因: 因为kotlin 默认屏蔽了许多空指针,所以当书写动态代理的时候,需要将返回值的Any改为Any?,意为可以为空;
解决方案: 如果是自定义InnovationHandler的时候返回值加可空操作符?;
如果是使用lambda表达式的时候使用埃尔维斯表达式?: 返回一个可空Unit(Void)也可,其实这里不写Unit也可以不会报错,因为默认加了操作符!,表示不为空;