我有以下类Entity,BaseClass,SubClass1,SubClass2。
[13, 20, 16, 12, 11, 50]
your numbers: 13 20 16 12 11 50
you won [13, 20, 16, 12, 11, 50]
user_numbers = [int(number) for number in userinput.split()]
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;
}
实体是通过调用API获得的。根据BaseClass的public class SubClass1 extends Base {
private String field3;
}
属性的值,我想将Entity映射到相应的子类。
下面是我可以想到的一种映射方式,
public class SubClass2 extends Base {
private String field4;
}
我将根据我的业务逻辑中的type
有条件地调用方法@Mapper
public interface EntityMapper {
SubClass1 mapEntityToSubClass1(Entity entity);
SubClass2 mapEntityToSubClass2(Entity entity);
}
或mapEntityToSubClass1
。由于我将从外部API获取列表,因此循环遍历,检查mapEntityToSubClass2
中的类型对我来说似乎并不好。在我的业务逻辑中,当前有4个子类,将来会有更多子类,并且逻辑变得更加笨拙。
在mapstruct中是否有更好的方法来实现相同的功能?
答案 0 :(得分:1)
不确定我是否理解正确,但是您只想根据源中的字段选择要映射到的子类?不要在业务逻辑中这样做,只需使用默认方法即可。像这样:
@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);
}