将实体映射到正确的子类
Map Entity to the correct subclass
我有以下 类 实体、BaseClass、SubClass1、SubClass2。
public class Entity {
private String field1;
private String field2;
private String type;
private String field3;
private String field4;
}
public class BaseClass {
private String field1;
private String field2;
private String type;
}
public class SubClass1 extends Base {
private String field3;
}
public class SubClass2 extends Base {
private String field4;
}
实体是通过调用 API 获得的。根据BaseClass的type
属性的值,我想把Entity映射到对应的子类
下面是我能想到的一个映射选项,
@Mapper
public interface EntityMapper {
SubClass1 mapEntityToSubClass1(Entity entity);
SubClass2 mapEntityToSubClass2(Entity entity);
}
我将根据业务逻辑中的 type
有条件地调用方法 mapEntityToSubClass1
或 mapEntityToSubClass2
中的任何一个。因为我将从外部 API 获取一个列表,循环检查 Entity
中的类型对我来说似乎不太好。在我的业务逻辑中,目前有 4 个 sub类,将来可能会有更多,逻辑会变得更笨拙。
在 mapstruct 中是否有更好的实现方法?
不确定我是否理解正确,但您只想根据源中的字段选择映射到哪个子类?不要在业务逻辑中这样做,只需使用默认方法即可。像这样:
@Mapper
public interface EntityMapper {
default BaseClass map(Entity entity) {
if(entity.getType().equals("a"))
return mapEntityToSubClass1(entity);
if(entity.getType().equals("b"))
return mapEntityToSubClass2(entity);
throw new RuntimeException("Unsupported base type");
}
Sub1 mapEntityToSubClass1(Entity entity);
Sub2 mapEntityToSubClass2(Entity entity);
}
我有以下 类 实体、BaseClass、SubClass1、SubClass2。
public class Entity {
private String field1;
private String field2;
private String type;
private String field3;
private String field4;
}
public class BaseClass {
private String field1;
private String field2;
private String type;
}
public class SubClass1 extends Base {
private String field3;
}
public class SubClass2 extends Base {
private String field4;
}
实体是通过调用 API 获得的。根据BaseClass的type
属性的值,我想把Entity映射到对应的子类
下面是我能想到的一个映射选项,
@Mapper
public interface EntityMapper {
SubClass1 mapEntityToSubClass1(Entity entity);
SubClass2 mapEntityToSubClass2(Entity entity);
}
我将根据业务逻辑中的 type
有条件地调用方法 mapEntityToSubClass1
或 mapEntityToSubClass2
中的任何一个。因为我将从外部 API 获取一个列表,循环检查 Entity
中的类型对我来说似乎不太好。在我的业务逻辑中,目前有 4 个 sub类,将来可能会有更多,逻辑会变得更笨拙。
在 mapstruct 中是否有更好的实现方法?
不确定我是否理解正确,但您只想根据源中的字段选择映射到哪个子类?不要在业务逻辑中这样做,只需使用默认方法即可。像这样:
@Mapper
public interface EntityMapper {
default BaseClass map(Entity entity) {
if(entity.getType().equals("a"))
return mapEntityToSubClass1(entity);
if(entity.getType().equals("b"))
return mapEntityToSubClass2(entity);
throw new RuntimeException("Unsupported base type");
}
Sub1 mapEntityToSubClass1(Entity entity);
Sub2 mapEntityToSubClass2(Entity entity);
}