希望对Android应用中的Kotlin非空断言错误进行解释。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希望对Android应用中的Kotlin非空断言错误进行解释。相关的知识,希望对你有一定的参考价值。
我是Kotlin的新手,我正在编写一个android应用程序,但我收到了以下截图中描述的编译器警告。
我对这个特殊错误的疑问与以下几行有关。
if (months?.toInt() == 1) { monthsText = "1 Mo " }
if (months?.toInt() > 1) { monthsText = String.format("%d Mos ", months) }
第一行的==编译正常,但> 1产生了null断言。 我已经添加了一个错误的截图和一个代码片段。 另外,如果有更好的代码方法,可能对我理解这个问题有帮助。
如果我添加了错误中提到的 !!,它就会编译和运行,但如果月份变量为空,这可能是应用程序崩溃。
我真的不明白为什么==会和>不同。
我从数据库中获取的数据中,"yearsMonthsExperience "存储为 "1205"(YYMM)。
val yearsMonths= (markerData.mMarkerUser!!["yearsMonthsExperience"] as? String)?.padStart(4, '0')
val years = yearsMonths?.take(2)?.toInt()
val months = yearsMonths?.takeLast(2)?.toInt()
var yearsText = ""
if (years != null && years == 1) { yearsText = "1 Yr " }
if (years != null && years > 1) { yearsText = String.format("%d Yrs ", years) }
var monthsText = ""
if (months?.toInt() == 1) { monthsText = "1 Mo " }
if (months?.toInt() > 1) { monthsText = String.format("%d Mos ", months) }
mInfoView.lbYearsExperience.text = String.format("%s%s Exp.", yearsText, monthsText)
先谢谢你的解释或帮助。
>
是一个被覆盖的操作符。它只是一个语法糖。
所以你的if语句实际上是这样的。months?.toInt().compareTo(1)
为了让它工作,你需要给它一个默认值,就像这样: months?.toInt()?:0 > 1
.
你可以在这里阅读更多关于操作符重载的内容。https:/kotlinlang.orgdocsreferenceoperator-overloading.html。
以上是关于希望对Android应用中的Kotlin非空断言错误进行解释。的主要内容,如果未能解决你的问题,请参考以下文章
用 Kotlin 编写的 Android 库,提供对 Java 应用程序的支持
用 Kotlin 编写的 Android 库,提供对 Java 应用程序的支持
Kotlin空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
使用 Kotlin 从 Android 上 ViewModel 中的 LiveData 更新 ListView 中的元素