为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Modelmapper 转换器重写为 Lambda 表达式(java 1.8)?

如何将 Modelmapper 转换器重写为 Lambda 表达式(java 1.8)?

尚方宝剑之说 2021-08-04 17:50:14
我使用ModelMapper 2.1.0并且有一个名为Converter的接口我正在像这样使用这个转换器(模型映射器):import org.modelmapper.Converter;public class MyClass {    private ModelMaper myMapper = new ModelMapper();          Converter<Instant, java.util.Date> myDateConverter;    @Before     public void setup() {        myDateConverter = new Converter<Instant, java.util.Date>() {        @Override        public java.util.Date convert(MappingContext<Instant, java.util.Date> mappingContext) {                return java.util.Date.from(mappingContext.getSource());            }       }    }    @Test    public void fromDto() {        myMapper.addConverter(myDateConverter);        ....        assertThat(domain.getDate()).isEqualTo(dto.getDate())    }}现在我只想像这样用 lambda 重写匿名内部类:myDateConverter = mappingContext -> java.util.Date.from(mappingContext.getSource());但是当我测试 (JUnit) 时,转换器返回nulllambda 表达式。如何将这个匿名内部类重写为一个实际上真正转换的 lambda 表达式?
查看完整描述

2 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

我认为这个问题是 ModelMapper 无法正确解析 lambda 表达式中的泛型类型。

这是解决方法:

modelMapper.typeMap(Source.class, Destination.class)
  .setConverter(ctx -> new Destination(ctx.getSource));


查看完整回答
反对 回复 2021-08-04
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

lambda 本身是有效的,应该可以工作。限制是Converter必须是功能接口,而不是类。


此表达式的目标类型必须是函数式接口


@FunctionalInterface

public interface Converter<T1, T2> {

    public Date convert(MappingContext<Instant, Date> mappingContext);

}

然后 lambda 看起来相同并且应该可以工作:


myDateConverter = mappingContext -> java.util.Date.from(mappingContext.getSource());


查看完整回答
反对 回复 2021-08-04
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信