- ?.
//kotlin:
a?.foo()
//相当于java:
if(a!=null){
a.foo();
}
- !!.
//kotlin:
a!!.foo()
//相当于java:
if(a!=null){
a.foo();
}else{
throw new KotlinNullPointException();
}
时间宝贵的同学可以不要看下面的了(` _ `)
- 再来说下"!!"
值得一提的是,当我们直接调用一个可空变量的某方法或某成员变量时:
直接调用,报错提示
Android Studio会提示在一个可空变量上,只有"安全调用"(safe call (?.))和"不为空的断言调用"(non-null assert call(!!.))是被允许的,可以得知"!!"相当于是断言操作,即:
//(Kotlin)
a!!.foo()
//等于(Kotlin):
a!!
a.foo()
//相当于(Java):
assert a!=null;
a.foo();
//也就相当于(Java):
if(a == null){
throw new NullPointException();
}
a.foo();
进而有上面第2点结论。
作者:怜悯是我的座右铭
链接:https://www.jianshu.com/p/9ef959752c72
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
参: