Kotlin Contract是否有可能使这种智能广播成为可能?
假设我具有以下Maps扩展功能
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
}
答案 0 :(得分:0)
您目前无法使用合同执行此操作(请注意:如果他们涵盖此案,我会感到惊讶)。但是,标准库为您提供了两种不同的方式!
假设您有一个Map
,则可以在其上调用containsKey
(如果现在拥有,则进行排序)。知道在这种情况下“ A”不为空,我们可以使用.getValue("A")
从映射中获取非空值。
val map = mapOf("A" to "B")
if(map.containsKey("A")) {
println(map.getValue("A").toLowerCase())
}
请注意,如果您使用一个实际上为空的值调用.getValue()
,则会得到一个NoSuchElementException
。
另一种惯用的方法是使用let
,它只会在值不为null时执行该块:
map["A"]?.let {
println(it.toLowerCase())
}
在此示例中,如果您愿意,我们可以将["A"]
替换为.get("A")
。