【问题标题】:Java "target type of lambda conversion must be an interface"Java“lambda转换的目标类型必须是接口”
【发布时间】:2015-12-23 00:32:24
【问题描述】:

我正在尝试在 java 中使用 lambdas 和流,但我对它很陌生。 当我尝试制作 lambda 表达式时,我在 IntelliJ“目标类型的 lambda 转换必须是一个接口”中收到此错误

List<Callable<SomeClass>> callList = prgll.stream()
                                          .map(p->(()->{return p.funct();} )) <--- Here I get error
                                          .collect(Collectors.toList());

我做错了吗?

【问题讨论】:

    标签: java intellij-idea lambda


    【解决方案1】:

    我怀疑这只是 Java 的类型推断不够聪明。试试

     .map(p -> (Callable<SomeClass>) () -> p.funct())
    

    【讨论】:

      【解决方案2】:

      Stream#map() 是一个typed 方法,所以可以显式指定类型:

       .<Callable<SomeClass>>map(p -> () -> p.funct())
      

      或者更简洁,使用方法参考:

       .<Callable<SomeClass>>map(p -> p::funct)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多