Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “处理清单”;“可选操作”;_Java - Fatal编程技术网

Java “处理清单”;“可选操作”;

Java “处理清单”;“可选操作”;,java,Java,我在查看列表以找到一个允许替换元素(set(int,E))的方法,我发现该方法是“可选的”。我搜索了一会儿,找到了另一个,劳伦斯·贡萨尔维斯给了我一个很好的答案 但我仍然有一个问题,直到现在,每次我使用任何接口时,我都没想到一个实现会抛出运行时异常(除非我用错了或者它是实现代码中的一个bug),即使我在不小心尝试将元素添加到不可变列表时遇到异常,我也没有意识到发生了什么 我的问题是:如果我有一个API方法,它有一个列表(或其他接口)参数,必须调用该对象上的“可选”操作,那么我应该如何继续 我应

我在查看列表以找到一个允许替换元素(set(int,E))的方法,我发现该方法是“可选的”。我搜索了一会儿,找到了另一个,劳伦斯·贡萨尔维斯给了我一个很好的答案

但我仍然有一个问题,直到现在,每次我使用任何接口时,我都没想到一个实现会抛出运行时异常(除非我用错了或者它是实现代码中的一个bug),即使我在不小心尝试将元素添加到不可变列表时遇到异常,我也没有意识到发生了什么

我的问题是:如果我有一个API方法,它有一个列表(或其他接口)参数,必须调用该对象上的“可选”操作,那么我应该如何继续

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

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

Java库本身始终回答您的两个问题“否”。例如,实用程序方法接受任何
列表
,如果传递给它的
列表
不支持必要的操作,则引发异常。一般来说,坚持这种行为与Java库和主要的开发实践是一致的:继续使用
列表,就好像它是可变的一样,如果有人传入一个
列表
而不支持必要的操作,他们将得到他们应得的异常。

Hi Jarrod。我相信这不是一个重复的问题,我不是问为什么操作是可选的,我是问如何处理它。我在自己的问题中链接了另一个问题,解释了为什么它是可选的,正如我在问题中所说的,我读到了它…好吧,这是有意义的,所以我基本上必须在方法文档中明确列表必须是可变的?!对于“可选”操作,可以通过另一种方式进行操作,例如删除和插入而不是替换元素,这是正常的。可能会造成严重的性能损失,也可能会产生不必要的副作用。您可以考虑捕获异常并以“备份”的方式进行操作。只要你记录下你的方法在这些情况下所做的事情,这应该不会是一个问题。@DJClayworth我不认为这是常见的情况——通常我会认为,如果有其他方法来支持操作,即使是低效的方法,实现也会继续进行,并在方法中使用这种方法。@RafaelTeles:Yup,这就是方法。