• java如何优雅的避免npe判定


    optional小结

    java8使用Optional实现优美的npe判断

    1、optional是那种初始化方法

    //空的optional对象
    Optional<String> empty = Optional.empty();
    //不为null的optional对象 Optional
    <String> str = Optional.of("hello world");
    //可以为null的optional对象 Optional
    <String> nullable = Optional.ofNullable(null);

    2、使用optional.orElse可以实现兜底值

    KeyValue kv = new KeyValue("keyi","hahha");
    Optional<KeyValue> kvOption = Optional.ofNullable(kv);
    Optional<String> key = kvOption.map(KeyValue::getKey);
    System.out.println(key.orElse("123"));

    如果kv == null ---> key.orElse("123") == "123"

    如果kv != null ---> key.orElse("123") == "keyi"

    2.1使用orElseGet接收实现Supplier接口的方法

    KeyValue kv = null;
    Optional<KeyValue> kvOption = Optional.ofNullable(kv);
    Optional<String> key = kvOption.map(KeyValue::getKey);
    System.out.println(key.orElseGet((Supplier) () -> "fuck"));

    这个时候就会输出一个fuck

    2.2使用orElseThrow抛出异常

    KeyValue kv = null;
    Optional<KeyValue> kvOption = Optional.ofNullable(kv);
    Optional<String> key = kvOption.map(KeyValue::getKey);
    System.out.println(key.orElseThrow((Supplier) () -> {
                throw new IllegalArgumentException("KeyValue not null");
            }));

    抛出:

    2.3使用ifPresent,可以接收一个Consumer的接口

    2.4 简化if-else

  • 相关阅读:
    C语言之指针基础概念
    Android之常用功能代码
    Android之ImageButton控件基础操作
    BZOJ1079或洛谷2476 [SCOI2008]着色方案
    HDOJ2870 Largest Submatrix
    BZOJ1855或洛谷2569 [SCOI2010]股票交易
    BZOJ1233 [Usaco2009Open]干草堆tower
    HDOJ4261 Estimation
    POJ3254或洛谷1879 Corn Fields
    POJ1037 A Decorative Fence
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/11722720.html
Copyright © 2020-2023  润新知