我正在构建一个需要在 Android 上进行一些蓝牙操作的库。我想返回一个 Future 实例,因此使用我的库的任何人都可以在返回的 future 上调用 .get() ,并且可以自行处理 ExecutionException、TimeoutException 和 InterruptedException 。但是,我想自己检测超时,因为我需要一些清理逻辑,例如与设备断开连接等。我怎样才能实现这个目标?
最佳答案
您可以围绕 Future
实现一个包装类它委托(delegate)给另一个(无论您目前在哪里获取 Future
返回的那个)。像这样的东西:
final class DelegatingFuture<T> implements Future<T> {
private final Future<T> delegate;
DelegatingFuture(final Future<T> delegate) {
this.delegate = Objects.requireNonNull(delegate);
}
// All other methods simply delegate to 'delegate'
@Override
public T get()
throws InterruptedException, ExecutionException {
try {
return this.delegate.get();
} catch (final Exception ex) {
// Handle cleanup...
throw ex;
}
}
// Something similar for get(long timeout, TimeUnit unit)
}
然后简单地return new DelegatingFuture<>(currentFuture);
无论您在何处分发这些内容。
关于java - 检测 Java Future 上的超时异常而不调用 get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56956841/