1、?修饰申明在成员变量的类型后面
表示这个变量可以为null,例如:
在类中成员变量
private var mAa: AlphaAnimation? = null
在方法中局部变量:
var mAa: AlphaAnimation? = null
在方法传参的形式参中:
override fun initView(savedInstanceState: Bundle?) {
}
2、?放在对象后面代表该对象如果为null则不处理后面逻辑,!!放在对象后面代表该对象如果为null则抛异常
例如:
//tv_appconfig为null会抛异常
tv_appconfig!!.text = CallSystemFunUtils.getAppVersionName(baseContext)
//tv_appconfig为null后面代码不执行
tv_appconfig?.text = CallSystemFunUtils.getAppVersionName(baseContext)
这里要控制好度,那些代码为空不想让它执行,那些代码为空想让它抛异常得到错误信息。
3、!! 放在方法传递实参后面,也是代表不能为null,为null会抛异常
rootView!!.startAnimation(mAa!!)
4、如果想要执行一段非空代码块,建议使用let操作符
例如:object?.let{ //object非空才会执行代码块
it.todo()
}
5、尽量少使用 !!,多使用?