返回 unmodifiableList 是可以接受的,还是应该返回数组?

2022-09-02 09:56:24

我有从远程服务器获取数据并返回的方法。List<Foo> getFoos ()

当然,用户不应该更改列表中的项目数,因为他将获得与服务器上的数据不同步的数据(如果他想更改项目数,他有特殊的方法,例如)。addFoo ()

第一种方法是返回数组并将方法的签名更改为 。但它在java中更常见,并且更方便用户操作集合,因此我将签名更改为.此方法始终返回Foo[] getFoos ()List<Foo> getFoos ()

Collections.unmodifiableList (originalList)

因此,当用户尝试更改列表时,他将获得 RuntimeException。

在类似情况下,是否有任何关于 API 设计的建议?


答案 1

Collections.unmodifiableList是完全可以接受的,应该更快(无需创建数组)。

编辑 - 在API设计方面,你应该把你的JavaDoc弄清楚!使用方法而不阅读其文档的人应该得到惊喜:p


答案 2

我还想说这是完全可以接受的,并且比返回数组要好得多(有些人建议应该完全将其视为已弃用的类型)。但是,如果您想在API中更明确地说明它,则可以考虑从Google Collections返回。ImmutableList