首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java List<Futures>参数化

java List<Futures>参数化
EN

Stack Overflow用户
提问于 2017-01-04 15:07:22
回答 3查看 1.7K关注 0票数 11

前几天,我在Vert.x期货上遇到了一个奇怪的问题,它并没有破坏代码,但仍然困扰着我。

在没有参数的情况下,未来将产生以下警告:

未来是一种原始类型。对泛型类型未来的引用应该参数化

添加参数,解决问题:

代码语言:javascript
复制
Future<YourClassName> future = ...

在处理期货列表时,您还可以很好地参数化它:

代码语言:javascript
复制
List<Future<YourClassName>> future = ...

但是CompositeFuture.all()似乎不能处理参数化的列表,并强迫您删除参数。

是否有任何方法可以使参数化的期货列表与CompositeFuture一起工作,还是我们只需忽略这一警告?它不会破坏任何东西,但仍然是很好的解决办法,以消除这一警告。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-05 17:03:30

一方面,你不能在参数化期货列表中使用CompositeFuture.all()。由于类型擦除,这是开发人员做出的设计决策。

但实际上,CompositeFuture.all()并没有做什么特别的事情。因此,您可以使用静态方法创建自己的接口,这样做也是一样的:

代码语言:javascript
复制
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()]));
    }
}

现在:

代码语言:javascript
复制
    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);
票数 6
EN

Stack Overflow用户

发布于 2017-01-04 16:31:52

CompositeFuture.all()返回一个CompositeFuture,它本身就是一个Future<CompositeFuture>。因此,您可以将结果分配给Future<CompositeFuture>而不是原始的Future

代码语言:javascript
复制
Future<String> fut1 = asyncOp1();
Future<Integer> fut2 = asyncOp2();
Future<CompositeFuture> all = CompositeFuture.all(fut1, fut2);
票数 0
EN

Stack Overflow用户

发布于 2020-08-27 16:52:51

促进评论

评论中的@oh-god-spiders的建议对我的情况确实有帮助。

代码语言:javascript
复制
val futures: util.List[Future[List[CustomClass]]] = asyncCode()
// Doesn’t work
val compositeFuture = CompositeFuture.all(futures)

// Works
val compositeFuture = CompositeFuture.all(new util.ArrayList[Future[_]](futures))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41467014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档