kotlin 爬坑指南--kotlin开发记录的问题

Kotlin开发易错问题汇总


举个栗子


数组array(arrayof())参数在传入到参数类型为Object... (vararg)中时,抛wrong number of arguments异常;

* 解决方案

原因: 因为需要参数类型为vararg(Object...)长类型,所以当直接把参数 args: Array<out Any>? 传入其中,编译器会认为传入了一个单独的整个数组元素,而不是传入了数组元素;

解决方案: 使用kotlin的伸展操作符*即可,*args 意为将array拆成一个个元素传入;

注意*符号不能跟null,所以需要使用?:操作符判空 ;-> method!!.invoke(obj, *(args ?: emptyArray()))

kotlin 爬坑指南--kotlin开发记录的问题

kotlin 爬坑指南--kotlin开发记录的问题

当书写动态代理时,可能会抛method.invoke(iam, *args) must not be null异常;

kotlin书写动态代理 注意

原因: 因为kotlin 默认屏蔽了许多空指针,所以当书写动态代理的时候,需要将返回值的Any改为Any?,意为可以为空;

解决方案: 如果是自定义InnovationHandler的时候返回值加可空操作符?;

如果是使用lambda表达式的时候使用埃尔维斯表达式?: 返回一个可空Unit(Void)也可,其实这里不写Unit也可以不会报错,因为默认加了操作符!,表示不为空;
kotlin 爬坑指南--kotlin开发记录的问题