我使用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));
斯蒂芬大帝
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());
添加回答
举报
0/150
提交
取消