我看到一个典型的addXXXListener()返回void! 我认为这是一种全面的做法,无论是UI框架(如Swing)还是服务器端框架。为什么addListener()通常返回void?
对于前: 类:AsyncContext
public void addAsyncListener(AsyncListener listener);
public void addActionListener(ActionListener l)
和许多其他例子...
不应该我们有兴趣知道,如果添加监听通话成功完成? 如果组件处于无法添加侦听器的状态,该怎么办?
对于离:考虑番石榴库[ListenableFuture](http://guava-libraries.googlecode.com/svn/tags/release08/javadoc/com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable,java.util.concurrent.Executor))
它有一个
void addListener(Runnable listener, Executor exec);
它的行为是,收听者被执行时未来的计算已完成。 他们采取的方法是,如果未来已经完成,那么听众将立即被调用。即使未来已经完成了。 没有任何迹象表明他们在未完成的未来不必要地调用addListener()!
我会认为addListener()应该能够返回一个值(boolean?),它表示如果可以成功添加侦听器并让调用者在侦听器无法添加时执行处理!
我知道为什么所有addListeners都是这样写的。 我只是不知道为什么?
回答真的是一门艺术。感谢这样写得很好(但很短)的答案。 – brainOverflow 2013-05-10 18:56:30