Kotlin合同对另一个属性/功能有影响

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin合同对另一个属性/功能有影响相关的知识,希望对你有一定的参考价值。

是否有可能与Kotlin合同使这个智能广播成为可能? 假设我有地图的跟随扩展功能

fun<K, V> Maps<K, V>.contains(k : K) : Boolean
{
    //simply check for map containing key
}

在调用该方法之后,我希望将此调用转换为NotNull:

if(map.contains(key))
{
    map.get(key).callAnyMethod()
    //smartcast get(key) to not null
}
答案

你现在不能用合同做这个(旁注:如果他们报道这个案子,我会感到惊讶)。但是,标准库让您了解了几种不同的方法!

假设你有一个Map,你可以在它上面调用containsKey(如果你现在的那样排序)。知道在这种情况下“A”不为空,我们可以使用.getValue("A")从地图中获取非空值。

val map = mapOf("A" to "B")
if(map.containsKey("A")) {
    println(map.getValue("A").toLowerCase())
}

请注意,如果您使用实际为null的值调用.getValue(),您将获得NoSuchElementException

另一个更惯用的方法是使用let,如果值不为null,它将只执行块:

map["A"]?.let { 
    println(it.toLowerCase())
}

在这个例子中,如果你愿意,我们可以用["A"]替换.get("A")

以上是关于Kotlin合同对另一个属性/功能有影响的主要内容,如果未能解决你的问题,请参考以下文章

Android:片段在活动结果合同中未收到 RESULT_OK

使用 Kotlin 在片段中引用 RecyclerView 时出现空指针错误

片段内 Spinner 的 Kotlin 问题

Kotlin 在片段中找不到按钮 ID,为啥?

kotlin-从一个片段更改多个片段的小数位

如何在 Kotlin 片段内的按钮之间切换片段?