Rau*_*uno 7 java future list vert.x
前几天我遇到了Vert.x期货的一个奇怪的问题,它没有破坏代码但是让我感到困扰.
没有参数的Future会产生以下警告:
未来是一种原始类型.应该参数化对泛型类型Future的引用
添加参数,解决问题:
Future<YourClassName> future = ...
Run Code Online (Sandbox Code Playgroud)
处理期货清单时,您也可以将其参数化:
List<Future<YourClassName>> future = ...
Run Code Online (Sandbox Code Playgroud)
但CompositeFuture.all()似乎无法处理参数化列表并强制您删除参数.
是否有任何方法可以使参数化的期货清单工作,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()]));
}
}
Run Code Online (Sandbox Code Playgroud)
现在:
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);
Run Code Online (Sandbox Code Playgroud)