java - 获取在封闭范围中定义的局部变量必须是最终的或有效的最终的
问题描述
我得到“在封闭范围内定义的局部变量必须是最终的或有效的最终”,如下所示。我不确定如何在 lambda 表达式中解决这个问题。
synchronizationVBOVO.getProductVO().getProducts().forEach(eachProduct -> {
Products product = v1UserIdaasEntitlementRequest.new Products();
product.setName(eachProduct.getProductName());
Product entitleProduct = entitlementResponse.getProducts().stream()
.filter(entitleproduct -> entitleproduct.getName().equalsIgnoreCase(eachProduct.getProductName()))
.findAny().orElse(null);
List<Packages> packages = new ArrayList<>();
Packages pack = v1UserIdaasEntitlementRequest.new Packages();
eachProduct.getPackages().forEach(productPack -> {
pack.setName(productPack.getPack().getPackageName());
Package entitlePackage = new Package();
if(null != entitleProduct && null != entitleProduct.getPackages() && !entitleProduct.getPackages().isEmpty()) {
entitlePackage = entitleProduct.getPackages().stream().filter(
entitlePack ->
entitlePack.getName().equalsIgnoreCase(productPack.getPack().getPackageName()))
.findAny().orElse(null);
}
List<RumLimits> rumLimits = new ArrayList<>();
RumLimits rumlimit = v1UserIdaasEntitlementRequest.new RumLimits();
productPack.getPack().getRumLimits().forEach(rumLimit -> {
setRumLimits(entitlePackage, rumLimits, rumlimit, rumLimit);
Wallet wallet = v1UserIdaasEntitlementRequest.new Wallet();
setWallet(v1UserIdaasEntitlementRequest, pack, entitlePackage, wallet);
});
pack.setRumLimits(rumLimits);
packages.add(pack);
});
product.setPackages(packages);
allProducts.add(product);
});
解决方案
您正在更改变量的值entitlePackage
。您正在分配一个值,即new Package()
但在if
语句中您正在分配一个不同的值。
实际上 final意味着变量必须只被赋值一次。
您只能通过else
向if
.
Package entitlePackage;
if(null != entitleProduct && null != entitleProduct.getPackages() && !entitleProduct.getPackages().isEmpty()) {
entitlePackage = entitleProduct.getPackages().stream().filter(
entitlePack ->
entitlePack.getName().equalsIgnoreCase(productPack.getPack().getPackageName()))
.findAny().orElse(null);
}
else {
entitlePackage = new Package();
}
推荐阅读
- laravel - 如何为 Api 和 Web 使用单独的 Passport api
- c++ - 在 C++ 中的 Linux 中以 wc 形式对非基于文本的文件进行字数计数的实现
- ios - 在 Mobilefirst V7.1 上使用 Clevertap 推送通知在启动画面上出现 iOS 应用程序崩溃问题
- java - 如何在 UIMA 中运行注释器
- listview - 如何在颤动中获取存储中存在的所有图像和视频。就像一个画廊应用程序
- angular - 获取持久数据到组件
- java - java中如何避免FileSystemNotFoundException
- linux - bash 和 awk 脚本以 YYYY-MM-DD 格式获取上个月的日期
- python - 在 Python 中从特定 DNS 服务器解析 IP
- c++ - 这个函数的参数?