Optional类中of()和ofNullable()使用方法及区别说明
下文笔者讲述of()和ofNullable()方法的功能及区别说明,如下所示
ofNullable(T value)源码
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方法是不会抛出空指针异常
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。