MapStruct 可以通过使用自定义 Mapper 或 使用内置的 TypeConversion 进行范型转换。

  1. 使用自定义 Mapper

首先,创建一个自定义 Mapper 类,实现范型转换的方法。例如,假设我们有一个范型类 'Source' 和另一个范型类 'Target',我们想要将它们转换为 'Source' 和 'Target':

public class Source<T> {
    private T value;
    // getter and setter
}

public class Target<T> {
    private T data;
    // getter and setter
}

@Mapper
public interface CustomMapper {
    @Mapping(source = "value", target = "data")
    <T> Target<T> sourceToTarget(Source<T> source);
}

在这个 Mapper 中,我们定义了一个 'sourceToTarget' 方法,用于将 'Source' 转换为 'Target'。注意,我们使用了范型类型 '' 作为方法参数和返回类型。使用 '@Mapping' 注解指定源和目标属性之间的映射关系。

  1. 使用内置的 TypeConversion

MapStruct 也提供了内置的 TypeConversion,可以将一个范型类型转换为另一个范型类型。例如,我们同样想要将 'Source' 转换为 'Target':

@Mapper
public interface TypeConversionMapper {
    @Mapping(target = "data", source = "value", qualifiedByName = "convert")
    <T> Target<T> sourceToTarget(Source<T> source);

    @Named("convert")
    static <T> T convert(Object value) {
        // custom conversion logic
    }
}

在这个 Mapper 中,我们同样使用了 'sourceToTarget' 方法,但是我们使用了 'qualifiedByName' 属性指定了一个名为 'convert' 的转换器。然后,我们定义了一个 'convert' 方法,用于将 'value' 转换为 'data' 属性。注意,我们同样使用了范型类型 '' 作为方法参数和返回类型。

以上两种方式都可以实现范型转换,具体使用哪种方式取决于具体的场景和需求。

MapStruct 范型转换:使用自定义 Mapper 或 内置 TypeConversion

原文地址: https://www.cveoy.top/t/topic/oLVK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录