这是AbstractCollection<E>
类的一部分:
public boolean addAllm(Collection<? extends E> c) {
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
public boolean add(E e) {
throw new UnsupportedOperationException();
}
当方法add(E e)
返回值“false”并因此addAll
方法返回“false”时是否存在任何情况?
顺便说一句,我总是认为当一个方法属于任何类型时,它应该包含return语句(除了“void”)。所以,我的下一个问题是:
当java中的方法返回一种类型的值而不使用上面示例中的语句return
或throw new ...Exception()
时,还有其他任何情况吗?
对不起我的英语,如果不清楚的话......
答案 0 :(得分:1)
这是一个抽象类。
如果您使用所提供的add
方法(直接或通过addAll
),则只会使用UnsupportedOperationException
失败。
子类将希望提供自己的add
方法(实际上做了一些有用的事情)。
这些应该返回true
或false
,具体取决于是否添加了元素(例如,Set不允许重复)。
对于通常的方法返回值,编译器确保方法始终返回声明的返回类型的值(或返回没有void
方法的值)或抛出异常。它不会让你拥有可以在没有它的情况下结束的方法(*)
(*)你可以拥有根本没有结束的方法......
答案 1 :(得分:0)
某些集合可能会拒绝插入,例如Set意味着包含唯一元素,并且如果已经包含已添加的元素,则它们将保持不变并返回false。
构造函数有隐式返回,我认为这是退出返回类型与void不同的函数的唯一其他方法。