我看到典型的 addXXXListener() 返回 void !无论是 UI 框架(如 Swing)还是服务器端框架,我都认为这是一种全面的实践。
例如:类:AsyncContext
public void addAsyncListener(AsyncListener listener);
类:抽象按钮
public void addActionListener(ActionListener l)
还有许多其他的例子......
我们是否应该有兴趣知道添加侦听器调用是否成功完成?如果组件处于无法添加侦听器的状态怎么办?
例如:考虑 Guava 库 [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);
它的行为是当 Future 的计算完成时执行监听器。他们采用的方法是,如果 Future 已经完成,那么侦听器将立即被调用。即使未来已经完成了很久。没有迹象表明他们在已经完成的未来不必要地调用 addListener() !
我认为 addListener() 应该能够返回一个值(布尔值?),说明是否可以成功添加侦听器,如果无法添加侦听器,则让调用者进行处理!
我知道所有 addListener 都以这种方式编写一定是有原因的。我只是不知道为什么?