如何解决如何为任何方法调用创建通用包装?
我想创建一个辅助方法,该方法可以将任何同步方法调用包装/转换为异步Mono
。
required type: Mono <T>
Provided: Mono<? extends Callable<? extends T>>
这是我的代码:
public <T> Mono<T> wrapAsync(Callable<? extends T> supplier) {
return Mono.fromCallable(() -> supplier)
.subscribeOn(Schedulers.boundedElastic());
}
public void run() {
Mono<Boolean> mono = wrapAsync(() -> syncmethod());
}
private Boolean mySyncmethod() {
return true; //for testing only
}
解决方法
首先,您使用Callable Mono.fromCallable(supplier)
。
然后您将遇到一个问题,因为Mono.fromCallable将被推断为Callable<? extend ? extend T>
,因此您的Mono将是Mono<? extend T>
而不是Mono<T>
。为避免这种情况,有两种解决方案:
- 更改wrapAsync的签名:
public <T> Mono<T> wrapAsync(Callable<T> supplier) {
return Mono.fromCallable(supplier)
.subscribeOn(Schedulers.boundedElastic());
}
- 或者如果您想保留签名,则需要提供类型:
public <T> Mono<T> wrapAsync(Callable<? extends T> supplier) {
return Mono.<T>fromCallable(supplier)
.subscribeOn(Schedulers.boundedElastic());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。