在科特林:
在没有get
的情况下使用?
获得价值是不可接受的。但是使用?
比较是不可接受的。我确实进行了搜索,但找不到解决方案。
代码示例
var doc = document.getData();
var v = doc?.get("curr_version");
if(v > BuildConfig.VERSION_CODE){
}
答案 0 :(得分:2)
您可以使用显式的null检查:
if (v != null && v > BuildConfig.VERSION_CODE) { ... }
答案 1 :(得分:1)
如果v
为null,您可以使用elvis运算符返回默认值:
if (v ?: 0 > BuildConfig.VERSION_CODE)
或使用?.let { }
确保v不为null,如:
v?.let {
if (it > BuildConfig.VERSION_CODE) {
}
}
答案 2 :(得分:1)
如果您喜欢具有高阶函数的编程风格,建议为您的代码使用以下惯用法:
document.getData()
?.get("curr_version")
?.takeIf { it > BuildConfig.VERSION_CODE }
?.also {
...
}
答案 3 :(得分:0)
我会发誓
val doc = document.getData()
doc?.let{
if(it.get("curr_version") > BuildConfig.VERSION_CODE){
//TODO
}
}?:run {
//TODO If null
}