You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何将.not()替换为!运算符?

问题描述

首先给出两个可空类的定义(修正了代码中的语法笔误):

class NullableObject(
    val a: AnotherNullable? = null,
    val b: String = "b"
)

class AnotherNullable(val id: String) {
    val hash: Int? = someHashFunction(id)
    val hashInvalidHash: Boolean = (hash == null)
}

原代码通过.not()运算符实现需求:读取hashInvalidHash属性,若nullableObject或其属性a为null,则默认值设为false:

val hasAnotherNullableHash = nullableObject?.a?.hashInvalidHash.not() ?: false

现在需要将代码中的.not()转换为一元取反运算符!,但尝试的写法必须使用!!且无法保留默认值false:

val hasAnotherNullableHash = !nullableObject?.a?.hashInvalidHash!!
解决方案

正确的写法是先通过 Elvis 运算符?:将可空的Boolean?转换为非空布尔值(默认false),再对结果使用一元取反运算符!:

val hasAnotherNullableHash = !(nullableObject?.a?.hashInvalidHash ?: false)

逻辑说明

  1. nullableObject?.a?.hashInvalidHash:如果nullableObject或a为null,返回null;否则返回hashInvalidHash的布尔值。
  2. ?: false:将上述可空结果转为非空值,若为null则取默认值false。
  3. !(...):对最终的非空布尔值取反,完全等价于原代码中.not()的逻辑,同时避免了!!带来的空指针风险。

内容的提问来源于stack exchange,提问作者Ralf Wickum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:05:01