我的项目刚刚进行了声纳扫描,我发现了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吗?或者我应该在声纳扫描中将这个病例掩盖为假阳性?
2条答案
按热度按时间c9x0cxw01#
你可以这样写抛出一个错误,你可以使用如下。
proxyHost.orElseThrow(() -> new Exception("proxyHost is required"));
或者设置默认值String result=proxyHost.isPresent()?proxyHost.get():"proxyHost is required";
irlmq6kh2#
Java8API,它特别可以用来代替
Preconditions.checkNotNull(T)
是Objects.requireNonNull(T)
. 然而,在你的情况下,你有一个Optional
例如,所以您可能不想检查您的变量null
,但它不是空的。这可以通过Optional.orElseThrow
具体如下:guava文档
Iterables
类指定在许多情况下Iterables
是用的,可以用Java8Stream
取而代之的是。对于
Suppliers
我不知道Java8的直接等价类Supplier
示例。