下面的代码将在java中抛出UnsupportedOperationException:
UnsupportedOperationException
String[] arr = {"a", "b", "c"}; List<String> list = Arrays.asList(arr); list.add("d");
我有点困惑这不是违反了ISP规定吗?这里的类实现了List接口,但不能实现其方法add()
List
add()
sqyvllje1#
List.add()方法定义为可选操作:boolean add(E e)将指定的元素追加到此列表的末尾(可选操作)。下面它定义了什么时候抛出UnsupportedOperationException:投掷:UnsupportedOperationException-如果此列表不支持添加操作因此,实现(由Arrays.asList()返回)正在执行基于java.util.List接口规范“允许”执行的操作。
List.add()
boolean add(E e)
Arrays.asList()
java.util.List
ctehm74n2#
是的,它确实违反了接口隔离原则,就像任何不可修改的集合一样。Collections API的设计者本可以为写和读操作创建单独的接口,但决定将它们放在一起。有人可能会说,这个列表确实向ISP证实了这一点--它有add()函数--但它使用该函数所做的事情并不是您所期望的。[编辑,根据下面的@progman:并且异常 * 可以 * 被认为是接口的一部分,因为它是有文档记录的。Here是Software Engineering Stack Exchange上的相关讨论。
2条答案
按热度按时间sqyvllje1#
List.add()
方法定义为可选操作:boolean add(E e)
将指定的元素追加到此列表的末尾(可选操作)。
下面它定义了什么时候抛出
UnsupportedOperationException
:投掷:
UnsupportedOperationException
-如果此列表不支持添加操作因此,实现(由
Arrays.asList()
返回)正在执行基于java.util.List
接口规范“允许”执行的操作。ctehm74n2#
是的,它确实违反了接口隔离原则,就像任何不可修改的集合一样。Collections API的设计者本可以为写和读操作创建单独的接口,但决定将它们放在一起。
有人可能会说,这个列表确实向ISP证实了这一点--它有
add()
函数--但它使用该函数所做的事情并不是您所期望的。[编辑,根据下面的@progman:并且异常 * 可以 * 被认为是接口的一部分,因为它是有文档记录的。Here是Software Engineering Stack Exchange上的相关讨论。