Android Java和Kotlin 相互调用String空指针问题

67 阅读1分钟

问题

当使用kotlin的时候 bean.属性 属性为null的时候 var a:string = data.属性 这个时候会出现空指针问题.

val left_icon: String = dataBean.left_icon

当 left_icon 为null 的时候 这样调用会崩溃.

原因分析:

在java 中 String类型的数据可以为""和null,但是在kotlin 中 String 默认是不可空类型 当传入null类型会爆发空指针.这个时候追加一个?表示可以为空类型

说明:

  • var str:String="1111" str =null 是不行的 不能为空
  • var str:String?="1111" str =null 是可以的 因为String? 表示可为空 但是使用这个变量的时候需要做非空判断

在 Kotlin 中,普通类型默认是不可为空的,若想让变量能存储 null 值,就得使用 ? 来声明可空类型

问题多发场景:

在Java和kotlin 混搭项目中 因为java String表示""和null ,然而kotlin 的String 默认只表示""字符串 不能表示Null 所以 需要加上?做可空处理

修改方案

1: kotlin 中接收属性的时候 用 String?接收表示可空可值

DemoBean{
public String name=""
}

var name:String?=demoBean.name?:""

2:保证属性不为空

当类型是Java的bean 的时候默认值 为"" 没问题,别的地方设置null之后 再给kt调用依然会崩溃.

例如:

Gson() String类型的数据没值的时候默认会赋值给null 这个时候再调用会崩溃