Java中的数组违反ISP?

lyr7nygr  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(103)

下面的代码将在java中抛出UnsupportedOperationException

String[] arr = {"a", "b", "c"};
List<String> list = Arrays.asList(arr);
list.add("d");

我有点困惑这不是违反了ISP规定吗?这里的类实现了List接口,但不能实现其方法add()

sqyvllje

sqyvllje1#

List.add()方法定义为可选操作:
boolean add(E e)
将指定的元素追加到此列表的末尾(可选操作)。
下面它定义了什么时候抛出UnsupportedOperationException
投掷:
UnsupportedOperationException-如果此列表不支持添加操作
因此,实现(由Arrays.asList()返回)正在执行基于java.util.List接口规范“允许”执行的操作。

ctehm74n

ctehm74n2#

是的,它确实违反了接口隔离原则,就像任何不可修改的集合一样。Collections API的设计者本可以为写和读操作创建单独的接口,但决定将它们放在一起。
有人可能会说,这个列表确实向ISP证实了这一点--它有add()函数--但它使用该函数所做的事情并不是您所期望的。[编辑,根据下面的@progman:并且异常 * 可以 * 被认为是接口的一部分,因为它是有文档记录的。
Here是Software Engineering Stack Exchange上的相关讨论。

相关问题