如何解决Kotlin的空值感知运算符“?:”是否有“直接分配”?
因此,在Dart和TypeScript / JS中,我们具有与Kotlin的@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) {
request.getHeader("accept-language"); // null
LocaleContextHolder.getLocale(); // should evaluate to "kr";
}
等效的null感知运算符??
。
牢记这一点,如果我们发现自己处于这种情况:?:
,我们可以轻松地使用以下较短的语法:a = a ?? b
。当我们访问嵌套属性时,这很方便。做这样的事情有点丑陋:
a ??= b
什么时候可以做类似的事情:
someObj.someProp.foo.bar = someObj.someProp.foo.bar ?: someOtherBar
我真的没有发现someObj.someProp.foo.bar ?:= someOtherBar
TS / JS和Darts语法的任何Kotlin变体,这让我感到非常惊讶。有没有人遇到过这个?
解决方法
我没有发现任何本地方法,所以进行了扩展:
infix fun <T> KMutableProperty0<T?>.`?=`(other: T) = set(get() ?: other)
缺点:它仅适用于对象的属性,不适用于局部变量。另外,您必须在使用它的属性之前使用两个点“ ::”,因为这与在Kotlin中使用引用相似。
但是总的来说,它看起来确实很干净:
someObj.someProp.foo::bar `?=` someOtherBar
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。