处理列表“可选操作”

时间:2015-09-21 18:46:39

标签: java

我正在查看List的javadoc以找到允许替换元素( set(int,E))的方法,并且我看到该方法是“可选的”。我搜索了一会儿,发现另一个question得到了Laurence Gonsalves的答案。

但是我还有一个问题,直到现在每次我使用任何接口时,我都没想到实现会抛出运行时异常(除非我使用它错误或者如果它是实现代码中的错误),即使我当意外地试图将元素添加到不可变列表时我有例外,我没有意识到发生了什么。

我的问题是:如果我的API方法有一个List(或其他一些接口)参数,必须在该对象上调用“可选”操作,我该怎么办?

  • 我应该避免使用List,并使用一些实现作为参数吗?
  • 我应该制作清单的防御性副本,修改并返回 清单? (这可能会改变api客户端使用的实现)

我知道需要更改作为方法中的参数接收的列表是值得怀疑的,但可能是必要的

1 个答案:

答案 0 :(得分:2)

Java库本身一致地回答了你的两个问题"没有。"例如,实用程序方法Collections.shuffle接受任何List,如果传递给它的List不支持必要的操作,则抛出异常。一般来说,坚持这种行为与Java库和主要的开发实践是一致的:继续使用List就像它是可变的一样,如果有人传入List不支持必要的操作,他们将得到他们应得的例外。