是否可以用Java8API更改所有的GuavaAPI?

ddhy6vgd  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(425)

我的项目刚刚进行了声纳扫描,我发现了1个报告病例,是:
sonar建议使用Java8API而不是GuavaAPI。
在某些情况下,我可以更改api,但是我发现了一些情况,在这些情况下,我找不到对应的Java8替代guava。
例如:

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中找到一个替代品来替代Guava checkNotNull ,但看起来Java8没有。这只是一个例子。
我也找不到以下代码段的任何替换项:

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

等等。
我能在什么地方找到Java8替换api吗?或者我应该在声纳扫描中将这个病例掩盖为假阳性?

c9x0cxw0

c9x0cxw01#

你可以这样写抛出一个错误,你可以使用如下。 proxyHost.orElseThrow(() -> new Exception("proxyHost is required")); 或者设置默认值 String result=proxyHost.isPresent()?proxyHost.get():"proxyHost is required";

irlmq6kh

irlmq6kh2#

Java8API,它特别可以用来代替 Preconditions.checkNotNull(T)Objects.requireNonNull(T) . 然而,在你的情况下,你有一个 Optional 例如,所以您可能不想检查您的变量 null ,但它不是空的。这可以通过 Optional.orElseThrow 具体如下:

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

guava文档 Iterables 类指定在许多情况下 Iterables 是用的,可以用Java8 Stream 取而代之的是。
对于 Suppliers 我不知道Java8的直接等价类 Supplier 示例。

相关问题