问题描述
我的项目刚刚进行了声纳扫描,发现了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";