Kotlin中的双管道||运算符作用是什么?相关代码逻辑疑问求解
代码逻辑解析
这是利用了Kotlin中逻辑或运算符||的短路特性实现的前置校验逻辑,运行规则如下:
- Kotlin的
||是短路运算符:只有左侧表达式返回false时,才会执行右侧的表达式;如果左侧返回true,会直接跳过右侧逻辑继续执行后续代码 - 你给出的这行校验代码:
!screens.containsKey(type) || throw GdxRuntimeException("Screen already registered to type: $type.")
拆解执行逻辑:
- 首先判断
!screens.containsKey(type):即校验当前要注册的type是否还没有被添加到screens集合中 - 如果判断结果为true:说明不存在重复注册,
||直接短路,不会执行后面的抛异常逻辑,方法继续往下执行screens.put操作 - 如果判断结果为false:说明该type已经注册过了,此时会执行
||右侧的抛异常代码,直接终止当前方法的执行,不会走到后续的put逻辑
这种写法本质是「卫语句」的简化写法,和下面的常规条件判断逻辑完全等价:
open fun <Type : ScreenType> addScreen(type: Class<Type>, screen: Type) { // 等价的常规写法 if (screens.containsKey(type)) { throw GdxRuntimeException("Screen already registered to type: $type.") } screens.put(type, screen) }
这种简写在Kotlin库代码中非常常见,可以在不损失可读性的前提下让代码更紧凑。
内容的提问来源于stack exchange,提问作者Dj Sushi
相关产品推荐
相关产品推荐

