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()))
当书写动态代理时,可能会抛
method.invoke(iam, *args) must not be null
异常;
原因: 因为kotlin 默认屏蔽了许多空指针,所以当书写动态代理的时候,需要将返回值的Any
改为Any?
,意为可以为空;
解决方案: 如果是自定义InnovationHandler
的时候返回值加可空操作符?
;
如果是使用lambda表达式的时候使用埃尔维斯表达式?:
返回一个可空Unit(Void)也可,其实这里不写Unit也可以不会报错,因为默认加了操作符!
,表示不为空;