聊聊最近项目中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://i-blog.csdnimg.cn/blog_migrate/3ac3c6273a979f14d03d4aead3c19440.png

此时,如果使用变量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时,将会抛出一个空指针异常。开发时,当我们确定要使用的引用一定不会为空,我们这时候对这个引用使用非空断言运算符,如果有意外情况的话,这里就是报错。

运行结果如下:

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐