JavaOptional 类型是Java 8中引入的一个新类,它允许你的变量返回空值。
当你执行一个可以返回null 值的API调用时,这个类型通常被使用。
通过Optional 类型,你可以在你的程序中优雅地处理null 或空值。
考虑一下下面的Java程序例子:
public static void main(String[] args) {
Optional<String> myName = getName(true);
}
private static Optional<String> getName(Boolean isUser) {
if (isUser){
return Optional.of("Nathan");
}
return Optional.empty();
}
在上面Java代码的main() 方法中,变量myName 的值被分配为调用getName() 方法的结果。
getName() 方法可能会返回一个包裹在Optional.of() 中的String ,使其成为一个Optional<String> 类型。
该方法也可以返回一个由Optional.empty() 方法创建的Optional.empty 值。
在Kotlin中,没有Optional 类型来允许你的变量中出现null 或空值。
相反,Kotlin使用所谓的空值安全功能来帮助你在源代码中处理null 值。
Kotlin使用问号? 符号来定义一个可选变量。考虑一下下面这个变量的类型是如何用问号String? :
var myName: String? = "Nathan"
上面的? 意味着变量myName可以有一个有效的String 值或者一个null 值
相等的JavaOptional 变量会如下所示:
Optional<String> myName = Optional.of("Nathan");
在Kotlin中,当一个变量是null 或空时,你需要使用安全调用操作符(?.)调用class 方法或属性。
考虑一下下面的Kotlin代码:
var myName: String? = null
println(myName?.length)
只需在调用length 属性之前添加一个问号? ,Kotlin就可以帮助你避免Java源代码中经常出现的NullPointerException 错误。
与上述Kotlin代码相当的Java代码如下:
Optional<String> myName = Optional.empty();
myName.ifPresent(name -> System.out.println(name));
Optional.empty() 方法的调用会返回一个Optional 类的空实例。
然后Java将通过使用ifPresent() 方法来检查myName 变量的值。
当变量中有一个值时,Java将执行定义为ifPresent() 方法参数的lambda动作。
在上面的例子中,它是要打印出name 的值。
你需要使用Optional.empty() 方法来使Optional 类型为空。如果你使用null ,那么上面对ifPresent() 方法的调用将导致NullPointerException 错误。
结论
Optional 类型是Java编程语言自第8版以来新增加的一个类型,它可以帮助你在Java代码中处理空值。
在Kotlin中,Optional 类型被简化为Kotlin的空值安全特性,这有助于消除在你的Kotlin代码中引用null 值的危险。
你可以在这里了解更多关于Kotlin空值安全功能的信息。
虽然Java需要使用Optional.empty() 方法来处理非null 的空值,但Kotlin允许你在代码中使用字面的null 值,使事情变得更简单。