Java 8 - 可选类


Optional 是一个容器对象,用于包含非空对象。可选对象用于表示缺少值的 null。此类具有各种实用方法,可帮助代码将值处理为“可用”或“不可用”,而不是检查空值。它是在Java 8中引入的,类似于Guava中的Optional。

类别声明

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

public final class Optional<T> extends Object

类方法

先生。 方法及说明
1

静态 <T> 可选 <T> 空()

返回一个空的可选实例。

2

布尔等于(对象 obj)

指示某个其他对象是否“等于”此可选对象。

3

可选<T>过滤器(谓词<?超级<T>谓词)

如果存在值并且该值与给定谓词匹配,则返回描述该值的可选值,否则返回空可选值。

4

<U> 可选<U> flatMap(Function<? super T,可选<U>> 映射器)

如果存在值,则会将提供的可选承载映射函数应用于该值,返回该结果,否则返回空的可选值。

5

获取()

如果此Optional中存在值,则返回该值,否则抛出NoSuchElementException。

6

int 哈希码()

返回当前值的哈希码值(如果有);如果不存在值,则返回 0(零)。

7

void ifPresent(Consumer<? super T> 消费者)

如果存在值,它将使用该值调用指定的使用者,否则不执行任何操作。

8

布尔值 isPresent()

如果存在值则返回 true,否则返回 false。

9

<U>可选<U>映射(函数<?super T,?extends U>映射器)

如果存在值,则对其应用提供的映射函数,如果结果非空,则返回描述结果的可选值。

10

static <T> 可选<T> of(T 值)

返回具有指定的当前非空值的可选值。

11

static <T> 可选<T> ofNullable(T 值)

如果非空,则返回描述指定值的可选值,否则返回空可选值。

12

T orElse(T 其他)

如果存在则返回值,否则返回其他值。

13

T orElseGet(Supplier<? extends T> other)

如果存在则返回该值,否则调用 other 并返回该调用的结果。

14

<X 扩展 Throwable> T 或 ElseThrow(Supplier<? 扩展 X> 异常供应商)

返回包含的值(如果存在),否则抛出由提供的供应商创建的异常。

15

字符串转字符串()

返回此可选值的非空字符串表示形式,适合调试。

该类继承了以下类的方法 -

  • java.lang.Object

可选示例

使用您选择的任何编辑器(例如 C:\> JAVA)创建以下 Java 程序。

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编译器编译该类,如下所示 -

C:\JAVA>javac Java8Tester.java

现在运行 Java8Tester,如下所示 -

C:\JAVA>java Java8Tester

它应该产生以下输出 -

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