我执行以下操作:
if (!items.containsKey(item) || items.get(item).getPrice() != 0) continue;
对于上述情况,我得到警告。为了避免它,我这样做
Objects.requireNonNull(items.get(item)).getPrice() != 0
以上方法有效,但它并不干净,无论如何,我只是检查了该项目是否存在,因此请确保它不是null。
有没有更清洁的方法?谢谢
这是完整的代码行:
if (!Utils.getInstance().items.containsKey(item.getId()) || Objects.requireNonNull(Utils.getInstance().items.get(item.getId())).getPrice() == 0) continue;
答案 0 :(得分:1)
if (!Utils.getInstance().items.containsKey(item.getId()) || Objects.requireNonNull(Utils.getInstance().items.get(item.getId())).getPrice() == 0) continue;
这是代码的壮举!
您在一行中编写了很多逻辑,您需要将其划分为更易读的逻辑。
让我们简化您的代码,
首先,删除requireNonNull
。所以会像这样:
if (!Utils.getInstance().items.containsKey(item.getId()) || Utils.getInstance().items.get(item.getId()).getPrice() == 0) continue;
第二,将Utils.getInstance().items
提取到单个变量中。因此,就像这样(在这里,我假设您将Map
与HashMap
一起使用):
// assuming a HashMap
HashMap items = Utils.getInstance().items;
if (!items.containsKey(item.getId()) || items.get(item.getId()).getPrice() == 0) continue;
第三,我们将密钥提取为单个变量:
// assuming a HashMap
HashMap items = Utils.getInstance().items;
// assuming a string as the key
String key = item.getId();
if (!items.containsKey(key) || items.get(key).getPrice() == 0) continue;
现在,我们可以将or
部分拆分为:
// assuming a HashMap
HashMap items = Utils.getInstance().items;
// assuming a string as the key
String key = item.getId();
if (!items.containsKey(key)) continue;
if(items.get(key).getPrice() == 0) continue;
最后一个代码将给您警告,因为Map.get()
可以返回一个null
值。您可以从Map.get()文档中看到。因此,我们需要警惕。
此处是最终版本:
// assuming a HashMap
HashMap items = Utils.getInstance().items;
// assuming a string as the key
String key = item.getId();
if (!items.containsKey(key)) continue;
if(items.get(key) == null) continue;
if(items.get(key).getPrice() == 0) continue;
可能最终会为您的代码添加更多行。但这使您的代码更具可读性和可维护性,因为您无需费劲去理解代码。
答案 1 :(得分:0)
您可以使用@NonNull注释您的方法/变量
@NonNull
fun test(){
}
@NonNull
private lateinit var test:List<String>
答案 2 :(得分:0)
也许您应该将if条件更改为
if (!items.containsKey(item) || items.get(item).getPrice() != 0) continue;
到
if (items.get(item) == null || items.get(item).getPrice() != 0) continue;
答案 3 :(得分:0)
您无需确保OwnCloudAccount
包含密钥public OwnCloudAccount(Uri baseUri, OwnCloudCredentials credentials)
,只需按照以下方式进行操作即可:
items