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

我使用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 表达式?


尚方宝剑之说
浏览 173回答 2
2回答

月关宝盒

我认为这个问题是 ModelMapper 无法正确解析 lambda 表达式中的泛型类型。这是解决方法:modelMapper.typeMap(Source.class,&nbsp;Destination.class) &nbsp;&nbsp;.setConverter(ctx&nbsp;->&nbsp;new&nbsp;Destination(ctx.getSource));

斯蒂芬大帝

lambda 本身是有效的,应该可以工作。限制是Converter必须是功能接口,而不是类。此表达式的目标类型必须是函数式接口@FunctionalInterfacepublic interface Converter<T1, T2> {&nbsp; &nbsp; public Date convert(MappingContext<Instant, Date> mappingContext);}然后 lambda 看起来相同并且应该可以工作:myDateConverter = mappingContext -> java.util.Date.from(mappingContext.getSource());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java