【问题标题】:java lambda map().collect(Collectors.toList()) compile errorjava lambda map().collect(Collectors.toList()) 编译错误
【发布时间】:2021-09-06 18:19:10
【问题描述】:

当我编译我的代码时,它报告编译错误。 我认为它会运行但报告错误! ma​​p() 阶段包含通用字段和设置值时为什么会出错,

** 错误信息: java:不兼容的类型:java.lang.Object 无法转换为 java.util.List**

    public class B {
        private Long id;
        private Map<String, Long> wk;
        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public Map<String, Long> getWk() {
            return wk;
        }

        public void setWk(Map<String, Long> wk) {
            this.wk = wk;
        }
    }
    public static class A {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }


    public static void main(String[] args) {

        List<A> details = new ArrayList<>(12);
        List<B> collect = details.stream()
                .map(detail -> {
                    B b = new B();
                    b.setId(12L);
                    Map mp = new HashMap(3);
                    mp.put("12",new Object());
                    b.setWk(mp);
                    return b;
                }).collect(Collectors.toList());
    }

【问题讨论】:

  • 不要对MapHashMap 使用原始类型。
  • 是的,给 Map 和 HashMap 添加泛型,如果你不使用它的地方,所有其他泛型都将被删除
  • 您的代码无法编译,原因不是您给出的错误消息。如果我稍微修改它以使其编译,它不会给出错误消息。请给出一个完整的、可复现的代码示例。
  • 和别人说的完全一样。 不要使用原始类型。始终提供必要的类型参数。

标签: java lambda type-inference


【解决方案1】:

B.wk 的类型为 Map

在 stream.map 中,您调用 b.setWk 时使用没有泛型类型集的 Map。

这将导致编译器看到您的 new Object() 与 B.wk 想要的 Long 类型的值不匹配。

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多