![]() |
1
26
这取决于,你希望你的用户能够索引到数据中吗?如果是,请使用列表。两者都是接口,所以您不会泄露实现细节,实际上,您只需要确定所需的最低功能。 |
![]() |
2
19
返回集合会给用户造成歧义,因为返回的集合可以是Set、List或Queue。 |
![]() |
3
10
|
![]() |
4
8
当返回高层次结构中的接口或类的实现时,经验法则是,声明的返回类型应该是最高级别,它提供您准备好向调用者保证的最低功能,并且调用者合理地需要这些功能。例如,假设您真正返回的是ArrayList。ArrayList实现列表和集合(以及其他功能)。如果您希望调用者需要使用get(intx)函数,那么返回集合将不起作用,您需要返回List或ArrayList。只要您不明白为什么要将实现更改为使用列表以外的内容(比如一个集合),那么正确的答案就是返回一个列表。我不确定ArrayList中是否有任何函数不在列表中,但如果有,同样的推理也适用。另一方面,一旦您返回了一个列表而不是一个集合,您现在已经在某种程度上锁定了实现。在API中放得越少,对未来改进的限制就越少。
|
![]() |
5
5
除非有明确的理由使用更具体的类型列表,否则使用最通用的类型Collection是最有意义的。但是不管你做什么,如果这是一个公共消费的API,那么在文档中要清楚它是做什么的;如果它返回一个收藏的浅拷贝,那么就这样说。 |
![]() |
6
1
是的,如果方法总是返回一个列表,那么您的第一个替代方法不会泄漏实现细节。另外,允许用户代码替换集合实例有些危险,因为它们传入的实现可能不会像您期望的那样工作。 当然,这完全取决于你对用户的信任程度。如果你接受Python的哲学“我们都是同意的成年人”,那么第一种方法就是好的。如果您认为您的库将被没有经验的开发人员使用,并且您需要尽一切努力来“看护”他们,确保他们不会做错什么,那么最好不要让他们设置集合,甚至不要返回实际的集合。相反,返回它的(浅)副本。 |
![]() |
7
0
|
![]() |
8
-1
如果我担心向外部用户隐藏数据的内部表示,我会使用XML或JSON。不管怎样,它们都是相当普遍的。 |
![]() |
Giffyguy · 如何限制在构造向量后调用'resize()'? 3 年前 |
![]() |
vytaute · 返回表类型时Oracle函数中的类型错误 3 年前 |
![]() |
bbgghh · 在scala中连接两个列表时如何处理不匹配的键 3 年前 |
![]() |
dev-chicco · Laravel系列寻找常见物品 3 年前 |
![]() |
Mitch · Laravel-雄辩的单品合并系列 7 年前 |
![]() |
Kieran · 为什么类X可以从集合继承<X> 7 年前 |
![]() |
John · 如何在不返回集合本身的情况下返回集合的数据? 7 年前 |
![]() |
Niklas Mertsch · 在泛型集合中实现移除(对象o) 7 年前 |