java - 在不调用 get() 的情况下检测 Java Future 上的超时异常
问题描述
我正在构建一个需要在 Android 上进行一些蓝牙操作的库。我想返回一个 Future 实例,所以使用我的库的任何人都可以在返回的未来调用 .get() 并且可以自己处理 ExecutionException、TimeoutException 和 InterruptedException。但是,我想自己检测超时,因为我需要一些清理逻辑,比如从设备断开连接等等。我怎样才能做到这一点?
解决方案
您可以实现一个包装器类,围绕Future
该包装器类委托给一个不同的类(由您目前获得的任何地方返回的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);
只要你把这些分发出去。
推荐阅读
- jquery - 如何使用 jquery 从表中获取所有数据,包括输入和选择标签值?
- python - Python:列表列表
- python - 打开并打印文件的内容?
- r - R data.table:在内部使用 setDF() 似乎不起作用(全局)?
- php - 为什么我在 php 中发送电子邮件时得到 html 代码?
- spring-boot - 无法发送 post 请求(springboot/postman/angular/mysql)
- firebase - 在 Flutter 中接收通知时如何使 Firebase 推送通知增加徽章计数?
- python - 解释 leetcode 中关于二叉树定义的注释
- matlab - 切出除matlab中间指定的NxN部分之外的所有方形数组
- mysql - 从与 Laravel 中的同一视图无关的不同表中获取不同数据的最佳方法是什么?