UML类图

model层
BaseModel
/**
* 基础类
*/
public abstract class BaseModel<T extends BaseModel<T>> {
private final Map<Class<? extends T>, T> extObjCache = new ConcurrentHashMap<>();
public <E extends T> E getExtObj(Class<E> extClass) {
if (!this.getClass().isAssignableFrom(extClass)) {
throw new IllegalArgumentException(
extClass.getSimpleName() + " must extend " + this.getClass().getSimpleName()
);
}
return extClass.cast(
extObjCache.computeIfAbsent(extClass, k -> {
try {
E extObj = extClass.getDeclaredConstructor().newInstance();
BeanUtil.copyProperties(this, extObj);
return extObj;
} catch (Exception e) {
throw new RuntimeException("Failed to create extension object", e);
}
})
);
}
}
Model
/**
* 模型类
*/
@Getter
@Setter
public class Model extends BaseModel<Model> {
private String name;
}
SubModel
/**
* 子模型
*/
@Getter
@Setter
public class SubModel extends BaseModel<SubModel> {
private String name;
}
domain层
ModelExt
/**
* 拓展类
*/
public class ModelExt extends Model {
private List<SubModel> subModelList;
public List<SubModel> querySubModelList() {
// SubModelService service = SpringUtils.getBean(SubModelService.class);
List<SubModel> subModels = new ArrayList<>();
SubModel subModel = new SubModel();
subModel.setName("subModel");
subModels.add(subModel);
return subModels;
}
}
测试
public class MainTest {
public static void main(String[] args) {
Model model = new Model();
model.setName("model");
ModelExt extObj = model.getExtObj(ModelExt.class);
System.out.println(extObj);
ModelExt extObj1 = model.getExtObj(ModelExt.class);
System.out.println(extObj1);
List<SubModel> subModelList = model.getExtObj(ModelExt.class).querySubModelList();
subModelList.forEach(v-> System.out.println(v.getName()));
}
}
835

被折叠的 条评论
为什么被折叠?



