对于面向接口的行为不太明白
source link: https://www.v2ex.com/t/791391
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
例如我有一个 arraylist 要返回,那我在返回值写成 list,那我是能理解的。但如果我有一个 unmodifiable list 要返回,那我是不是应该直接写返回 unmodifiable list,还是写返回 list. 因为很多 impl 其实都只是实现了接口,但没有规定最终行为。要是我返回 list,调用者用 add method,不就有 UnsupportedOperationException ?
还是照样返回 list,但写注释来注明返回的是 unmodifiable list ?但这样也有不少负担。
earneet 23 小时 35 分钟前
一些接口,返回 list 的时候,我们都是采用复制一份 arraylist 的形式提供给调用者, 这样就避免了调用者的修改会对内部数据造成破坏。
unmodifiable list 自然更高效而且天生防止破坏。
最令我接受的是 Arrays.asList() 接口返回的是 List,且不支持修改操作。 类似的第一方接口还有不少。
这种问题不应该去 StackOverFlow 提问么?
kaneg 22 小时 2 分钟前 via iPhone
再说用别人返回的 list 本来就是用来获取数据,调用 add 是不应该的,如果真的需要修改,应该自己新建。
还有一种更好办法,就是用数组代替 list 。
kidlj 21 小时 54 分钟前
kidlj 21 小时 49 分钟前
Leviathann 20 小时 42 分钟前
但自从函数式思想传播开后,其实现在也很少会对 list 做增删改,都是用 stream 生成新的 list
所以就偷懒写 list 了
当然更好的方法是换一种对类型推导支持更加完善的语言,比如 kotlin
SoloCompany 5 小时 37 分钟前
而现在你也可以选择 kotlin, kotlin List 就是 readonly 的, 所有的 collection interface 数量都 double 了成为配对的 Collection / MutableCollection
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK