Java 8 - Optional Class可选类

Java 8 - Optional Class可选类


1 Java 8-概述
2 Java 8 - Lambda表达式
3 Java 8 - 方法引用
4 Java8-Functional Interfaces函数式接口
5 Java 8 - 默认方法
6 Java 8 - Streams
7 Java 8 - Optional Class可选类
8 Java 8 - Nashorn JavaScript
9 Java 8 - New Date/Time API

可选是一个容器对象,用于包含非空对象。可选对象用于表示null,缺少值。这个类有各种各样的实用方法,以方便代码处理值为'可用'或'不可用',而不是检查空值。它在Java 8中引入,与Guava中的可选项相似。

原文链接:http://blogxinxiucan.sh1.newtouch.com/2017/07/19/Java-8-Optional-Class可选类/

Class Declaration

以下是java.util.Optional <T>类的声明-

public final class Optional<T>
extends Object

类方法

编号方法和说明
1static <T> Optional<T> empty() 返回一个空的可选实例。
2boolean equals(Object obj) 指示某个其他对象是否等于此可选项。
3Optional<T> filter(Predicate<? super <T> predicate) 如果存在值并且该值与给定谓词匹配,则返回一个可选描述该值,否则返回一个空可选。
4<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 如果一个值存在,它会将提供的可选轴承映射函数应用于该值,返回该结果,否则返回一个空可选。
5T get() 如果此可选中存在值,则返回该值,否则将抛出NoSuchElementException。
6int hashCode() 返回当前值的哈希码值(如果有的话),如果没有值,则返回0(零)。
7void ifPresent(Consumer <?super T> consumer) 如果存在值,它将使用该值调用指定的消费者,否则不执行任何操作。
8boolean isPresent() 如果存在值,则返回true,否则返回false。
9<U>Optional<U> map(Function<? super T,? extends U> mapper) 如果存在值,则将提供的映射函数应用于其中,如果结果为非空,则返回一个可选描述结果。
10static <T> Optional<T> of(T value) 返回具有指定的当前非空值的可选。
11static <T> Optional<T> ofNullable(T value) 返回一个可选描述指定的值,如果非空,否则返回一个空可选。
12T orElse(T other) 返回值(如果存在),否则返回其他值。
13T orElseGet(Supplier<? extends T> other) 返回值(如果存在),否则调用其他值并返回该调用的结果。
14<X extends Throwable> T orElseThrow(Supplier <?extends X> exceptionSupplier) 返回包含的值(如果存在),否则将抛出由提供的供应商创建的异常。
15String toString() 返回此可选的非空字符串表示,适用于调试。

注 - 此类继承java.lang.Object类中的方法。

可选实例

要了解在实践中如何使用Optional,让我们看看下面的例子。编写以下程序,执行和验证结果,以获得更多的洞察力。

Java8Tester.java

import java.util.Optional;

public class Java8Tester {
   public static void main(String args[]){
   
      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);
        
      //Optional.ofNullable - allows passed parameter to be null.
      Optional<Integer> a = Optional.ofNullable(value1);
        
      //Optional.of - throws NullPointerException if passed parameter is null
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }
    
   public Integer sum(Optional<Integer> a, Optional<Integer> b){
    
      //Optional.isPresent - checks the value is present or not
        
      System.out.println("First parameter is present: " + a.isPresent());
      System.out.println("Second parameter is present: " + b.isPresent());
        
      //Optional.orElse - returns the value if present otherwise returns
      //the default value passed.
      Integer value1 = a.orElse(new Integer(0));
        
      //Optional.get - gets the value, value should be present
      Integer value2 = b.get();
      return value1 + value2;
   }
}

验证结果
使用javac编译器编译类,如下所示:

$javac Java8Tester.java

现在运行Java8Tester如下 -

$java Java8Tester

它应该产生以下输出 -

First parameter is present: false
Second parameter is present: true
10

转载于:https://my.oschina.net/u/3010553/blog/1588287

### 回答1: 将一个optional类型的变量转换为实体类对象,可以使用可选绑定的方式。例如,假设有一个Person类,包含name和age属性,以及一个optional类型的变量optionalPerson,代码示例如下: ``` class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } var optionalPerson: Person? = Person(name: "Tom", age: 20) if let person = optionalPerson { // 可选绑定成功,optionalPerson不为nil print(person.name) print(person.age) } else { // 可选绑定失败,optionalPerson为nil print("optionalPerson is nil") } ``` 在上述代码中,使用可选绑定将optionalPerson绑定到一个非可选的person常量,如果optionalPerson不为nil,则person常量包含了实体类对象,可以直接访问其属性。否则,可选绑定失败,代码会执行else分支。 ### 回答2: OptionalJava 8中引入的一个容器类,可以包装任意类型的对象。它提供了一种方式来处理可能为空的对象,旨在避免空指针异常。因此,将Optional转换为实体类的操作实际上是将Optional中包装的对象提取出来,并赋值给实体类的属性。 首先,我们需要创建一个实体类,其属性与Optional中包装的对象对应。接着,我们可以使用Optional的get()方法来获取Optional中的对象,然后将其赋值给实体类的属性。需要注意的是,使用get()方法获取Optional中的对象时,如果Optional为空,会抛出NoSuchElementException异常。因此,在转换之前,最好使用isPresent()方法进行判断,确保Optional不为空。 另外,为了更好地处理Optional为空的情况,我们可以使用ifPresent()方法,该方法接受一个Consumer函数式接口作为参数,用于处理Optional中的对象。例如,我们可以在ifPresent()中使用Lambda表达式来修改实体类的属性或进行其他操作。 最后,如果我们希望Optional为空时提供一个默认值,可以使用orElse()方法,该方法接受一个默认值,并在Optional为空时返回该默认值。 总而言之,将Optional转换为实体类的过程包括创建一个实体类、使用get()方法获取Optional中的对象并赋值给实体类的属性、使用ifPresent()方法处理Optional中的对象以及使用orElse()方法提供默认值。这样,我们可以更好地处理和利用Optional对象,避免空指针异常。 ### 回答3: optionalJava 8 中引入的一个特性,用于解决可能为空的变量的处理问题。通过将变量封装在 Optional 类型中,可以更加清晰地表达变量的可选性。 要将 optional 转换为实体类,首先需要通过调用 optional 的 get() 方法,获取 optional 中的实际值。如果 optional 中的值为空,则 get() 方法将抛出 NoSuchElementException 异常。因此,在调用 get() 之前,最好先使用 isPresent() 方法进行判断,以避免异常。 获取 optional 中的实际值之后,可以将其赋值给对应的实体类对象的属性。这里需要注意,实体类的属性类型必须与 optional 中的值的类型相匹配,否则会导致类型转换异常。 另外,如果希望在 optional 为空时有默认值,可以使用 orElse() 方法。该方法接收一个参数作为默认值,并在 optional 为空时返回该默认值。例如,可以使用 orElse(new Entity()) 将 optional 转换为实体类,并将默认实体类对象作为参数传入。 总之,将 optional 转换为实体类需要首先使用 get() 方法获取 optional 中的实际值,然后将其赋值给实体类对象的属性。如果 optional 为空,可以使用 orElse() 方法设置默认值。这样可以更好地处理可能为空的变量,并在代码中更加清晰地表达其可选性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值