Optional类中of()和ofNullable()使用方法及区别说明

戚薇 Java经验 发布时间:2023-05-10 20:59:19 阅读数:8020 1
下文笔者讲述of()和ofNullable()方法的功能及区别说明,如下所示

of()和ofNullable()方法的功能说明

of(T value)的功能:
     返回一个携带被指定的value
       且该value不能为NULL

ofNullable(T value):
      如果指定的value不为NULL
         则返回携带有该value的Optional

of()和ofNullable()方法示例

public static void main(String[] args) {
 
    try {
      // value值不存在
      String str = null;
 
      Optional.of(str);
 
    } catch (Exception e) {
      System.out.println(e);
    }
}
 
public static void main(String[] args) {
 
    try {
      // value值存在
      String str = "hello java265.com";
 
      String value = Optional.of(str).get();
      System.out.println(value);
 
    } catch (Exception e) {
      System.out.println(e);
    }
}
从以上的代码示例,我们可以得出以下结论
    当value存在时
      of(...)方法不会抛异常
    当value不存在,就会抛出空指针异常。

ofNullable(T value)示例

value值不存在

public static void main(String[] args) { 
    try {
      // value值不存在
      String str = null;
 
      Optional.ofNullable(str);
 
    } catch (Exception e) {
      System.out.println(e);
    }
}


value值存在

public static void main(String[] args) {
 
    try {
      // value值存在
      String str = "hello java265.com";
 
      Optional.ofNullable(str);
 
    } catch (Exception e) {
      System.out.println(e);
    }
}
 无论value值是否存在
    ofNullable(...)方法都不会抛出空指针异常

of()和ofNullable()方法源码分析

of(T value):

public final class Optional<T> {
 
    private Optional(T value) {
            this.value = Objects.requireNonNull(value);
    }
 
    public static <T> Optional<T> of(T value) {
            return new Optional<>(value);
    }
}

//value值会由Object类的requireNonNull()方法处理 

//requireNonNull源码解析

public final class Objects {
 
    public static <T> T requireNonNull(T obj) {
            if (obj == null)
                throw new NullPointerException();
            return obj;
    }
}

从源码中,我们可以得出抛出异常是由
     requireNonNull方法造成

ofNullable(T value)源码

public final class Optional<T> {
 
    // 实例化的一个value值为null的Optional类实例
    private static final Optional<?> EMPTY = new Optional<>();
 
    public static <T> Optional<T> ofNullable(T value) {
        // 当value为null时,会调用empty(),返回一个value为null的Optional类实例,
        // 若value不为null,就会调用of(..)方法,因为此时value值一定是存在的,所以即使
        // 使用这个方法也是不会抛出空指针异常的。
        return value == null ? empty() : of(value);
    }
 
    // 返回一个value为null的Optional类实例
    public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }
}
 of()和ofNullable()方法区别
    从她们的源码和示例中,我们可以得出两者的区别
	 当传入的值为null时
	of方法会抛出空指针异常,而ofNullable方法是不会抛出空指针异常
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202305/16837236556399.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者