null isNotBlank —— 长度大于0并且非空格返回true,必须先判断非null (2)、声明可空变量 kotlin中默认变量非空,如果需要声明一个可空的变量,则在类型后面追加一个问号?...(3)、校验空值的运算符——?、?:、!! ? 表示可空,如果空直接返回null ?: 表示一旦为空返回冒号后面的值,否则返回正常的值 !! 表示断言非空(放弃非空判断)。...但是,如果做了这个断言,但依旧为null,那么会报空指针。 var length_null:Int?...“表示可null,如果为null则直接返回null, 此时 length_null的值为null length_null = strB?....; 如果strB为null,则返回-1 length = strB?.
2.2 语句 2.2.1 in关键字的使用 判断一个对象是否在某一个区间内,可以使用in关键字 //如果存在于区间(1,Y-1),则打印OK if (x in 1..y-1) print("OK...") //如果x不存在于array中,则输出Out if (x !...判断一个对象是否为一个类的实例,可以使用is关键字 与 Java 中的instanceof关键字类似,但在 Kotlin 中如果已经确定了一个对象的类型,可以在接下来的代码块中直接作为这个确定类型使用。...is String){ } // 代码块外部的obj仍然是Any类型的引用 return null } 2.2.4 空值检测 Kotlin 是空指针安全的,也就意味着你不会再看到那恼人的空指针异常...fun say(str: String): String { return str } 同时,在 Kotlin 中,如果像这种简单的函数,可以简写为 fun say(str: String):
,== 还会检查两个可空变量是否都为 null,如果是,则它们被认为是相等的。 === 操作符: === 是一个恒等性比较操作符,它不仅比较两个对象的值是否相等,还检查它们是否是同一个对象实例。...如果两个引用指向不同的对象实例,即使它们的内容相同,=== 也会返回 false。 对于可空类型,=== 不会认为两个 null 值是相等的,即使它们都是 null。...对于基本数据类型和对象引用,它的行为与 == 相反,即如果两个值不相等或者引用不指向同一个对象,则返回 true。 2、 (大于): 用于比较两个数值是否满足小于或大于的关系。...in: in 用于检查一个值是否在某个范围内(例如,一个数字是否在两个数字之间),或者一个元素是否存在于集合中。 !in 则用于检查一个值是否不在某个范围内或集合中。...它返回一个整数,如果调用对象小于、等于或大于参数,则分别返回负数、零或正数。 7、 equals 方法: Any 类中的 equals 方法用于比较两个对象是否相等。
takeIf 函数里的闭包返回的是 Boolean 类型,如果闭包条件满足,则返回调用者本身,如果不满足,则返回 null。举个栗子来说明吧。 // code 3 car?....} // 闭包为 false,则返回空,执行 run 函数闭包 takeUnless 跟 takeIf 是相反的关系,takeUnless 的闭包条件满足则返回空,不满足则返回调用者自己。...所以 Kotlin 自带的操作符都是 inline 函数,我们如果要自定义一个操作符,也是需要修饰为 inline 函数。...Java 中的 equals 方法比较的是两个对象中各个属性值的是否相同。如果是两个字符串,就是比较的两字符串所包含的内容是否相同。...意思就是,在 code 11 中,如果 Lambda 表达式的 return 只是想中断该闭包的执行,而不想中断外部 main 函数的执行,该咋办?有人会说,那我不用 inline 不就可以了?
更重要的是,它没有提供与之对应的不可变的 val 关键字,你仍然需要添加 final 关键字,但几乎没有人使用它。 空安全 (Null Safety) 在 Java 中,我们无法知道变量是否为空。...从 Java 8 开始,如果返回 Optional 意味着实际的值可以为 null,如果返回其他类型则意味着值不能为 null。 但是,Optional 只针对返回值,不能用于方法的参数。...是否使用这些库是可选择的,而在 Kotlin 中,每种类型要么为空,要么为非空。...第二个问题是,如果我们无法控制的方法返回了一个类型,那么不管它是否包含我们想要的行为,都只能使用这个类型。...这是不得已而为之,因为 Java 不允许方法存在于类之外。 通过这种方式,如果某个方法不存在于某个类中,辅助类就提供这样的一个方法,这个方法将这个类作为参数并执行所需的操作。
17.1.要求 Spring Data 支持 Kotlin 1.3 并要求kotlin-stdlib(或其变体之一,例如kotlin-stdlib-jdk8)和kotlin-reflect存在于类路径中...如果您通过start.spring.io引导 Kotlin 项目,则默认提供这些。 17.2.零安全 Kotlin 的关键特性之一是空安全,它null在编译时干净地处理值。...Kotlin 对 JSR-305 注释和 Spring 可空性注释的支持为Kotlin 开发人员提供了整个 Spring Data API 的空安全,具有null在编译时处理相关问题的优势。...Spring Data 模块在以下范围内提供对协程的支持: Kotlin 扩展中的延迟和流返回值支持 17.5.1.依赖关系 协同程序支持时启用kotlinx-coroutines-core, kotlinx-coroutines-reactive...如果自定义方法是可调用的,则调用自定义实现方法会将 Coroutines 调用传播到实际实现方法,suspend而无需实现方法返回反应类型,例如Mono或Flux。
GET**方法查找对应于给定键的映射中的值。 它接收一个参数,这是您要查找的键。它返回与该键关联的值。如果映射中不存在键,则返回null。Kotlin 鼓励?空安全。...如果映射中不存在键,则将其与值一起插入。如果它已存在于maps中,则键保持不变,新值替换旧值。 对于插入,该方法返回 null。对于替换,它返回旧值。...Remove**方法从maps删除一个键和及其相关联的值。 它接收密钥作为参数。它返回值,如果键在maps中不存在,则该值为 null。...Clear** 方法删除maps中的所有项目。 它不接收或返回任何参数。它清空maps,将maps的大小设置回零。使用此操作后,您将无法访问之前存在的任何键或值。...如果您需要以不同的方式与maps进行交互,很可能存在适合您需求的操作。 maps无处不在。你会经常使用它们。幸运的是,Kotlin 为您提供了保障。基础maps类方便、易于使用,并且涵盖了大量用例。
一种更优雅的方法是使可选API提供的一系列高阶函数: 如果用户存储库返回的Optional为空,则flatMap将只返回一个空可选项。否则,它将返回可选的包装用户的地址。这样,就不需要进行任何空检查。...: "" //返回空字符串 注意空安全调用之间的区别吗?和非空断言运算符!!正如名称所示,如果反引用变量为null,则前者将立即返回null,而后者将抛出NullPointerException。...它返回在?:的左边的表达式的值,如果它不是null。否则,它计算右边的表达式并返回结果。....这样的表达式总是返回一个可选项,如果链中任何可选项都不包含,则该表达式将包含结果对象或none。因此,必须再次检查可选链的结果是否为nil。...如果可选项不包含任何值,则其目的是提供一个默认值。它的行为与 Kotlin’s Elvis操作员相似(?
在Kotlin中,除了表达式的值,有返回值的函数都要求显式使用return来返回其值。...kotlin 中 return 语句会从最近的函数或匿名函数中返回,但是在Lambda表达式中遇到return,则直接返回最近的外层函数。...意思是:如果 a 不是 null 则调用 equals(Any?) 函数并返回其值;否则(即 a === null)就计算 b === null 的值并返回。...: 是一个二元运算符,如果第一个操作数为真,则返回第一个操作数,否则将计算并返回其第二个操作数。它是三元条件运算符的变体。命名灵感来自猫王的发型风格。 Kotlin中没有这样的三元运算符 true?...安全调用在链式调用中很有用。在调用链中如果任意一个属性(环节)为空,这个链式调用就会安全返回 null。
15.1.要求 Spring Data 支持 Kotlin 1.3 并要求kotlin-stdlib(或其变体之一,例如kotlin-stdlib-jdk8)和kotlin-reflect存在于类路径中...如果您通过start.spring.io引导 Kotlin 项目,则默认提供这些。 15.2.零安全 Kotlin 的关键特性之一是空安全,它null在编译时干净地处理值。...Kotlin 对 JSR-305 注释和 Spring 可空性注释的支持为Kotlin 开发人员提供了整个 Spring Data API 的空安全,具有null在编译时处理相关问题的优势。...Spring Data 模块在以下范围内提供对协程的支持: Kotlin 扩展中的延迟和流返回值支持 15.5.1.依赖关系 协同程序支持时启用kotlinx-coroutines-core, kotlinx-coroutines-reactive...如果自定义方法是可调用的,则调用自定义实现方法会将 Coroutines 调用传播到实际实现方法,suspend而无需实现方法返回反应类型,例如Mono或Flux。
/ 闭包 的含义是 , 如果 name 变量 字符串非空白, 将其转为首字母大写 , 并返回 , 如果 name 变量 字符串为空白, 设置 Hello 值为返回值 ; fun main() {...: 表达式 B 如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ; 如果 表达式 A 的值 为 null , 则 整个表达式的值 就是 表达式 B 的值 ; 代码示例...: "name 变量为空" 代码 , 其效果如下 : 空合并操作符 左侧的 name 表达式如果为 null , 则 取 右边的 表达式 作为该表达式最终的值 , 如果 左侧的 name 表达式 不为...: "Jerry" println(name) } 执行结果 : Tom 如果 name 变量为 null , 则 ?: 表达式中 , 会选择 ?...null , 抛出 IllegalArgumentException 异常 ; 参数非空 , 返回非空值 ; /** * 如果[value]为空,则抛出[IllegalArgumentException
在Kotlin中序列化/反序列化JSON数据需要Jackson的Kotlin模块。在类路径中找到它时会自动注册。...如果Jackson和Kotlin存在但Jackson Kotlin模块不存在,则会记录警告消息。 如果在start.spring.io上引导Kotlin项目,则默认提供这些依赖项和插件。...50.2无安全性 Kotlin的一个关键特性是零安全性。它在编译时处理 null 值,而不是将问题推迟到运行时并遇到 NullPointerException 。...Kotlin还允许使用具有可空值的功能构造,如本 Kotlin中关于零安全性的综合指南中所 述。...虽然Java不允许在其类型系统中表示null安全性,但Spring Framework,Spring Data和Reactor现在通过工具友好的注释提供其API的空安全 性。
如有必要,为特定数据库启用分片。 在启用了分片的数据库中分片集合。 指定分片键。此示例使用基于范围的分片。 19.2.分片键处理 分片键由一个或多个属性组成,这些属性必须存在于目标集合的每个文档中。...20.1.要求 Spring Data 支持 Kotlin 1.3 并要求kotlin-stdlib(或其变体之一,例如kotlin-stdlib-jdk8)和kotlin-reflect存在于类路径中...如果您通过start.spring.io引导 Kotlin 项目,则默认提供这些。 20.2.零安全 Kotlin 的关键特性之一是空安全,它null在编译时干净地处理值。...Spring Data 模块在以下范围内提供对协程的支持: Kotlin 扩展中的延迟和流返回值支持 20.5.1.依赖关系 协同程序支持时启用kotlinx-coroutines-core, kotlinx-coroutines-reactive...如果自定义方法是可调用的,则调用自定义实现方法会将 Coroutines 调用传播到实际实现方法,suspend而无需实现方法返回反应类型,例如Mono或Flux。
,它的作用是如果a为空就返回null,而不是抛出异常。?:称为Elvis操作符,它为null的情况指定一个默认值。这样代码是很安全又简洁,非常适合日常开发中使用。...三、Elvis 操作符:提供默认值Elvis操作符(?:)可以在变量为null时提供默认值。...四、Kotlin调用Java代码:平台类型的风险Kotlin 和Java 可以互相调用,但Java代码没有空安全检查,会让Kotlin这些类型为“平台类型”。...五、类型转换更安全在Java中,类型转换通常借助instanceof判断变量类型,确保转换安全。Kotlin则提供了as?操作符,用于安全类型转换。如果转换失败,它会返回null而不是抛异常。...在日常开发中,Kotlin让代码更流畅、更安全,从Java转向Kotlin的开发者可以充分体验到空安全特性的便捷,减少了处理空值所带来的麻烦。
文章目录 一、takeIf 标准库函数 二、takeUnless 标准库函数 Kotlin 语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin...如果不满足则返回' null '值。...由其 Lambda 表达式参数的返回值 确定 , Lambda 表达式 返回 false , 则 返回 接收者对象 ; Lambda 表达式 返回 true , 则 返回 null 空值 ; takeUnless...函数原型 : /** * 如果不满足给定的[谓词],则返回' this '值;如果满足,则返回' null '值。...".takeUnless { it.contains("o") } 的返回值为 null , 由于后面的 ?.
null , 抛出 IllegalStateException 异常 , 参数为非空 , 返回非空值 ; /** * 如果[value]为空,则抛出[IllegalStateException]。...否则 * 返回非空值。...null , 抛出 IllegalArgumentException 异常 ; 参数非空 , 返回非空值 ; /** * 如果[value]为空,则抛出[IllegalArgumentException...否则返回非空值。 */ @kotlin.internal.InlineOnly public inline fun requireNotNull(value: T?)...否则 * 返回非空值。
在 Kotlin 中,不存在真正没有返回值的函数,所有「没有返回值」的函数实质上的返回值类型都是 Unit,而返回值也都是 Unit 这个单例对象。...是因为存在特例void,在Java中如果声明的函数没有返回值,那么它就需要用void来修饰。...Kotlin 编译器不会检查它们是否为 null,所以需要程序员**自己负责**。如果要避免空指针异常,可以使用安全调用运算符(?.)或非空断言运算符(!!)来处理平台类型。...```kotlin println(name?.length) // 安全调用,如果 name 为 null 则返回 null println(name!!....length) // 非空断言,如果 name 为 null 则抛出异常 ``` 平台类型是指 Kotlin 和 Java 的互操作性问题, 在混合项目中要多加注意。
可以简单理解为,直接在当前语句处中断,跳转到循环入口,执行下一轮循环。而break则是完全终止循环,跳转到循环出口。 问题场景: 打印1-10中的奇数。...在Kotlin中,除了表达式的值,有返回值的函数都要求显式使用return来返回其值。...kotlin 中 return 语句会从最近的函数或匿名函数中返回,但是在Lambda表达式中遇到return,则直接返回最近的外层函数。...意思是:如果 a 不是 null 则调用 equals(Any?) 函数并返回其值;否则(即 a === null)就计算 b === null 的值并返回。...: 是一个二元运算符,如果第一个操作数为真,则返回第一个操作数,否则将计算并返回其第二个操作数。它是三元条件运算符的变体。命名灵感来自猫王的发型风格。 Kotlin中没有这样的三元运算符 true?
: "name 为空" } 在上述函数中 , 首先确定 name 变量是否为空 , 如果 name 为空 , 则 name?.let {...}...: 后面的值作为整个表达式的值 ; 如果 name 不为空 , 则 执行 let 函数 , 整个表达式的值 就是 let 函数的最后一行 返回值 ; 执行结果 : name 为空 三、run 标准库函数...由其 Lambda 表达式参数的返回值 确定 , Lambda 表达式 返回 true , 则 返回 接收者对象 ; Lambda 表达式 返回 false , 则 返回 null 空值 ; takeIf...; takeIf 函数原型 : /** * 如果满足给定的[谓词]则返回' this '值,如果不满足则返回' null '值。...函数原型 : /** * 如果不满足给定的[谓词],则返回' this '值;如果满足,则返回' null '值。
} else { null } } 若 checkIsNull 对 evil() 的判定返回 true 则 evil() 事实返回的是字符串 "not null!"...,矛盾;另一方面,若 checkIsNull 对 evil() 的判定返回 false 则 evil() 事实返回的是 null,依然矛盾。...name 如果其中任意一步返回了 null 则整个表达式的结果将是 null。...包裹的 A 类型对象返回了 Some(b) 则结果为 Some(b),如果 optA 或调用 getOptionB 返回的值有一个为 None,则整个的结果为 None。...除此之外,Scala 还能对其进行模式匹配,这也不是为 Option 专门设计的,但实现了类似 Kotlin 中根据控制流来进行类型收窄的效果: val nameMaybe = request getParameter
领取专属 10元无门槛券
手把手带您无忧上云