代码之家  ›  专栏  ›  技术社区  ›  Panadol Chong

是否可以将所有的guava api更改为java8api?

  •  0
  • Panadol Chong  · 技术社区  · 4 年前

    我的项目刚刚进行了声纳扫描,我发现了1个报告案例,即:

    Sonar建议使用Java8API而不是GuavaAPI。

    例如:

    import java.util.Optional;
    import static com.google.common.base.Preconditions.checkNotNull;
    
    Optional<String> proxyHost;
    this.proxyHost = checkNotNull(proxyHost, "proxyHost is required")
                    .orNull(); // this line will having compilation error orNull method undefined.
    

    我试图在Java8API中找到一个替代品来代替番石榴 checkNotNull

    我也找不到替代以下片段的内容:

    import com.google.common.collect.Iterables.tryFind;
    import com.google.common.base.Suppliers;
    

    我能在什么地方找到Java8替代API吗?或者我应该把这个案子伪装成声纳扫描的假阳性?

    1 回复  |  直到 4 年前
        1
  •  2
  •   Hoopje    4 年前

    Java8API,它可以代替 Preconditions.checkNotNull(T) Objects.requireNonNull(T) . 但是,在你的情况下 Optional 实例,所以您可能不想检查变量是否 null Optional.orElseThrow 具体如下:

    this.proxyHost = proxyHost.orElseThrow(() -> new SomeExceptionClass("proxyHost is required"));
    

    的番石榴文档 Iterables 类指定在许多情况下 Iterables公司 使用时,可以使用Java8 Stream 而是s。

    Suppliers 类I不知道Java8的直接等价物 Supplier

        2
  •  -1
  •   Sagar Gangwal    4 年前

    你可以这样写

    proxyHost.orElseThrow(() -> new Exception("proxyHost is required"));

    或者设置默认值

    String result=proxyHost.isPresent()?proxyHost.get():"proxyHost is required";