Kotlin避免针对空检查的智能强制转换
所以我试图减少这段代码,避免IDE中的智能强制转换提示。 我的想法是我有一个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
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}
这似乎有点奇怪,但我上下文中的想法是将变量作为notnullable
传递给产生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
的方法。我仍然很好奇避免智能强制转换的原因。这是如此不可读。