问题说明了一切......
从List的代码:
添加方法:
public boolean add(E e) { ... }
然而,删除方法:
public boolean remove(Object o) { .. }
这有什么具体原因吗?
答案 0 :(得分:7)
来自the javadoc:
如果此列表不包含该元素,则不会更改
因此,在此处添加类型约束将毫无用处,而add
上的约束确保在编译时列表包含在框中写入的内容。
请注意,实现有一些自由,因为允许该方法抛出
如果指定元素的类型是ClassCastException 与此列表不兼容(可选)
ArrayList实现不会抛出此异常:
439 public boolean remove(Object o) {
440 if (o == null) {
441 for (int index = 0; index < size; index++)
442 if (elementData[index] == null) {
443 fastRemove(index);
444 return true;
445 }
446 } else {
447 for (int index = 0; index < size; index++)
448 if (o.equals(elementData[index])) {
449 fastRemove(index);
450 return true;
451 }
452 }
453 return false;
454 }
这意味着您不必在执行删除操作之前检查原始对象的类。