Kotlin对Java可选类型的替代(附实例)

579 阅读2分钟

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空值安全功能的信息。

Kotlin对问号的使用解释

虽然Java需要使用Optional.empty() 方法来处理非null 的空值,但Kotlin允许你在代码中使用字面的null 值,使事情变得更简单。