<分区>
场景
我想提供一种可能性,以可选在我的工作类中添加回调。这种回调的接口(interface)可能看起来像这样:
public interface Callback<T> {
void callback(final T data);
}
因为回调是可选的,所以每次调用之前我都需要检查是否在工作类中设置了回调:
public void doWork(final T data) {
if (callback != null) {
callback.callback(data);
}
// do the actual work
}
想法
所以我想知道有一个无操作回调是不是一个好主意,它看起来像这样:
@SuppressWarnings("rawtypes")
public class NopCallback implements Callback {
public static final NopCallback CALLBACK = new NopCallback();
@Override
public void callback(final Object data) {
// do nothing
}
}
默认情况下,worker 会将其回调设置为此 NopCallback:
@SuppressWarnings("unchecked")
public Worker() {
callback = NopCallback.CALLBACK;
}
真题
我已经发现 Nop 变体似乎表现更好(通过调用 doWork(...)
几千次并测量每个变体的持续时间)。我不太满意的是 @SuppressWarnings
的需要。我知道我可以摆脱它们,但我需要在我的每个工作类中有一个自己的 NopCallback 实例。
长话短说,从干净的代码、可读性、性能等方面来说,使用这种无操作回调是个好主意吗. 或者还有其他(优雅的)替代方案吗?