KOTLIN---9

聊聊最近项目中kotlin发现的问题吧

 最近在重构AI客服模块的时候,发现

1.加载WebView错误

Java代码下使用WebView加载网页没有问题,使用Kotlin就错误了。

错误日志如下:

Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter favicon



该错误日志是发生在WebViewClient中的onPageStarted()方法中的最后一个参数Bitmap favicon

public void onPageStarted(WebView view, String url, Bitmap favicon) {}
解决方法,使用只需要在Bitmap favicon的参数上加个?检查类型为空问题即可。

 

2.在用tablayout+viewpager+fragment的时候,如果不初始化控件(findviewbyid),会报空指针异常

  

3.空引用安全

通过其类型系统的定义可以有效的预防空指针的产生。

类型系统:

在Kotlin中,类型系统分为可以持有null类型的(可空引用)和不能为null的(非空引用)。我们以String(引用类型)来举个例子:

var a: String = "kotlin null safety"

a= null // 编译报错

 https://img-blog.csdn.net/20180619161842880

 

此时,如果使用变量a去访问其属性或者方法,这时候肯定不会导致空指针。

val len = a.length //编译通过     

如果我想str为null呢?我们可以声明一个变量为空字符串。可以写成String?:

var b: String? = "kotlin null safety"

b= null // 编译通过

 

 

如果用b变量去访问其属性或者方法,那这样就是不安全,编译报错。

val len = b.length // 错误:变量b不能为null

 

 

我们可以用下面这种方式来让上述编译通过。

b?.length // 编译通过

如果b变量不能null的话,则返回,这里的类型为Int?,如果b为null的话,则返回null。

除此之外Kotlin还提供了一个非空断言运算符。!!.,可以将任意值转换为非空类型。如果这个值为null时,将会抛出一个空指针异常。开发时,当我们确定要使用的引用一定不会为空,我们这时候对这个引用使用非空断言运算符,如果有意外情况的话,这里就是报错。

运行结果如下:

 

猜你喜欢

转载自blog.csdn.net/yangbin0513/article/details/107240391