Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin避免针对空检查的智能强制转换_Kotlin - Fatal编程技术网

Kotlin避免针对空检查的智能强制转换

Kotlin避免针对空检查的智能强制转换,kotlin,Kotlin,所以我试图减少这段代码,避免IDE中的智能强制转换提示。 我的想法是我有一个null类型的T变量,我想把它映射到R,或者如果变量是null,我就从供应商那里得到R 我尝试过不同的方法并想出了这个。但它给了我一个聪明的施法暗示 fun T?.func(映射器:(T)->R,供应商:()->R):R= 什么时候(这个){ 空->供应商() else->mapper(this)//smart cast } 但是我不喜欢把一个lambda包在括号里。比如说 fun-foo(值:字符串?):Int= v

所以我试图减少这段代码,避免IDE中的智能强制转换提示。 我的想法是我有一个
null
类型的
T
变量,我想把它映射到
R
,或者如果变量是
null
,我就从供应商那里得到
R

我尝试过不同的方法并想出了这个。但它给了我一个聪明的施法暗示

fun T?.func(映射器:(T)->R,供应商:()->R):R=
什么时候(这个){
空->供应商()
else->mapper(this)//smart cast
}
但是我不喜欢把一个lambda包在括号里。比如说

fun-foo(值:字符串?):Int=
value.func({it.length+20}){30}
这似乎有点奇怪,但我上下文中的想法是将变量作为not
nullable
传递给产生
R
的函数,或者调用产生
R
的函数

fun条(值:T?):R=
何时(值){
null->func1()
else->func2(值)//智能强制转换
}

注意:我已经读过了,但它不一样。

下面应该避免智能强制转换提示

fun <T, R> T?.func(mapper: (T) -> R, supplier: () -> R): R {
    return this?.let { mapper(it) } ?: supplier()
}
fun T?.func(映射器:(T)->R,供应商:()->R):R{
返回这个?.let{mapper(it)}?:supplier()
}

你所说的
避免智能投射是什么意思?出于什么目的?我不清楚这个问题,你是在
smart cast
将lambda包装在括号中的上下文中询问的?顺便说一句,你可以把两个lambda都放在括号里,这样比把一个放在括号外可读性更好。当最后一个参数中只有1个lambda时,建议将尾部lambda带到外部。如果
mapper
T
的方法,则可以将代码减少为
(this?.mapper())?:supplier()
。我在上下文中问,有没有更好的方法来避免智能强制转换并提高可读性?@Venkatesh Praadranganath ya我教过这一点,这解决了这两个问题,但不幸的是,映射器不是
t
的方法。我仍然很好奇避免智能强制转换的原因。这是如此不可读。