Java 返回一个空列表

新手上路,请多包涵

我的Java方法如下;

 public List<Lookup> findAll(String lang) {
    Query query = entityManager.createNamedQuery("Lookup.findAll");
    if (isValidLang(lang)) {
        query.setParameter("lang", lang);
        return query.getResultList();
    } else {
        //return empty list
    }
}

现在,该方法返回列表以获取有效的 lang 匹配项。

但如果不是这样,我想返回一个空列表。我的问题是如何更新代码以及返回空列表以使代码不会失败的最佳方法是什么?

原文由 copenndthagen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
1 个回答

如果您使用的是 Java 9 或更高版本:

 } else {
    return List.of();
}

如果你坚持使用 9 之前的某个版本的 java:

 } else {
    return Collections.emptyList();
}

笔记:

  1. 这些构造是最有效的,因为它们重用空列表的现有实例,因此每次您请求一个空列表时,都不会创建新列表。然而,Java 中的对象分配非常便宜,所以这真的不应该是一个问题。
  2. List.of()Collections.emptyList() 返回的列表是秘密不可变的。我所说的“秘密地”是指它公开了变异方法,但是如果您错误地调用了这些方法中的任何一个,您将遇到运行时异常。在其他比 Java 更好的语言中(例如,在 Scala 中)存在不可变/不可修改的集合,但 Java 没有“开箱即用”的东西。因此,如果您在 2020 年坚持使用 Java,那么您就接受了并非所有集合都可以写入的可能性,尽管它们看起来都可以写入。
  3. 通常,函数旨在返回不可变实体,因此如果您正在调用一个返回集合的函数,然后您打算修改该集合,那么您做错了。如果你真的需要一个你可以修改的集合,你应该编写你的函数,以便它填充一个你作为参数传递给它的可变列表,所以很明显,作为可变列表的所有者,你是自由的在函数返回后进一步修改列表。

原文由 Mike Nakis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题