2016-02-08 72 views
-1

所以我想实现一个自定义的收藏家,但可惜的是我被困在一个非常有趣的问题的类型:无法解决拉姆达参数

@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的实例来处理它的智能感觉很奇怪。你有什么想法为什么可能会发生。

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

+0

通过编译器,哪一个?什么版本的javac?或者它是Eclipse,IntelliJ,其他? – Tunaki

+0

javac 1.8.0_60和IntelliJ 14,我做了,没有运气,或者 – Zahari

+1

@Zahari当我评论'accumulator'方法内的返回块的内容时,两个参数'acc'和'elem'被正确解析为'Map < LocalDate,List >和TripResultDTO类型。 –

回答

0

所以实际上这是一个很不错的错误。我已经在收集的签名做的是:

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>> { 

现在一切正常。