前几天我遇到了 Vert.x futures 的一个奇怪问题,虽然没有破坏代码,但仍然困扰着我。
不带参数的 Future 会导致以下警告:
Future 是一种原始类型。对泛型类型 Future 的引用应该参数化
添加参数,问题解决:
Future<YourClassName> future = ...
在处理 future 列表时,您也可以对其进行参数化:
List<Future<YourClassName>> future = ...
But CompositeFuture.all() http://vertx.io/docs/apidocs/io/vertx/core/CompositeFuture.html#all-java.util.List-似乎无法处理参数化列表并强制您删除参数。
有什么方法可以使参数化的 future 列表与CompositeFuture
或者我们只需忽略该警告?它不会破坏任何东西,但仍然很高兴找到解决方案来消除该警告。
一方面,你不能使用CompositeFuture.all()
包含参数化期货列表。这是开发人员由于类型擦除而做出的设计决定。
但实际上,CompositeFuture.all()
没有做任何特别的事情。因此,您可能有自己的带有静态方法的接口,这将执行相同的操作:
interface MyCompositeFuture extends CompositeFuture {
// This is what the regular does, just for example
/*
static CompositeFuture all(List<Future> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
*/
static <T> CompositeFuture all(List<Future<T>> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
}
And now:
List<Future<String>> listFuturesT = new ArrayList<>();
// This works
MyCompositeFuture.all(listFuturesT);
List<Future> listFutures = new ArrayList<>();
// This doesnt, and that's the reason for initial design decision
MyCompositeFuture.all(listFutures);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)