是否可以使用Java 8 API更改所有Guava API?

问题描述

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

Sonar建议使用Java 8 API代替Guava API。

在某些情况下,我可以更改API,但是在某些情况下,我找不到对应的Java 8替换番石榴。

例如:

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.

我试图在Java 8 API中找到一个替代品来替代Guava checkNotNull,但是Java 8似乎没有它。这只是示例之一。

我也找不到以下代码段的替代项:

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

以此类推。

我可以在某处找到Java 8替换API吗?还是应该在声纳扫描中将此案例掩盖为误报?

解决方法

专门用于代替Preconditions.checkNotNull(T)的Java 8 API是Objects.requireNonNull(T)。但是,在您的情况下,您有一个Optional实例,因此您可能不想检查变量为null,但它不是非空的。可以使用Optional.orElseThrow进行以下操作:

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

Iterables类的Guava文档规定,在许多使用Iterables的情况下,可以改用Java 8 Stream

对于Suppliers类,我不知道Java 8 Supplier实例的直接等效项。

,

您可以这样写 要引发错误,可以按以下方式使用。

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

或设置默认设置,您可以尝试

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...