【问题标题】:Not able to resolve the type of a lambda parameter无法解析 lambda 参数的类型
【发布时间】:2016-05-18 00:48:33
【问题描述】:

所以我正在尝试实现一个自定义收集器,但不幸的是我遇到了一个非常有趣的问题:

@Override
public BiConsumer<Map<LocalDate, List<TripResultDTO>>, TripResultDTO> accumulator() {
    return (acc,elem) -> {
        long departureTime = elem.getOutbound().getDepartureTimeLocal();
        LocalDate departureDate = new LocalDateTime(departureTime).toLocalDate();
        List<TripResultDTO> othersInTheSameDay = acc.getOrDefault(departureDate,new LinkedList<>());
        othersInTheSameDay.add(elem);
        acc.put(departureDate,othersInTheSameDay);
    };
}

所以在上面的代码中,编译器无法解析 TripResultDTO 类型的 elem 对象的任何方法。

getOutbound 方法不用说是红色高亮显示,无法解析。从智能角度来看,TripResultsDTO 似乎被简单地视为Object 而不是TripResultDTO 的实例,这很奇怪。你知道为什么会发生这种情况吗?

也欢迎以更好的方式做我正在做的事情的任何想法。

【问题讨论】:

  • 编译器,哪一个?什么版本的javac?还是 Eclipse、IntelliJ 等?
  • javac 1.8.0_60 和 IntelliJ 14,我做到了,也没有运气
  • @Zahari 当我在accumulator 方法中评论返回块的内容时,accelem 两个参数被正确解析为Map&lt;LocalDate, List&lt;TripResultDTO&gt;&gt;TripResultDTO 类型。

标签: java lambda java-8 collectors


【解决方案1】:

所以实际上这是一个非常菜鸟的错误。我在收藏者的签名中所做的是:

public class CheapestPerDayCollector <TripResultDTO> implements Collector<TripResultDTO, Map<LocalDate, List<TripResultDTO>>, List<TripResultDTO>> {

这实际上将 TripResultsDTO 表示为泛型类型,而不是实际的类。我把它改写为:

public class CheapestPerDayCollector  implements Collector<TripResultDTO, Map<LocalDate, List<TripResultDTO>>, List<TripResultDTO>> {

现在一切正常。

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 2021-08-22
    • 2015-10-22
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2022-01-23
    相关资源
    最近更新 更多