我创建了两个接口。每个接口都扩展了另一个接口。我在出厂类中创建了一种方法,并且正在通过在每种情况下使用实现的类创建每个接口对象的对象。但是问题是我们如何管理多个返回类型一种方法。我知道这是不可能的,因为方法总是一次返回一个值。但是我想要动态返回类型我不想使用对象类型。有没有解决此问题的解决方案。
当返回动态对象返回动态对象时,该对象的方法应在不打字的情况下调用。
@Service
public class ModuleResolverFactory {
@Autowired
private ApplicationContext context;
public Object getModule(String objectType) throws VEnableBusinessException {
switch (objectType) {
case Constant.API_TYPE_DEE:
return context.getBean(SceModuleService.class);
case Constant.API_TYPE_SCE:
return context.getBean(SceModuleService.class);
default:
throw new VEnableBusinessException(Constant.STATUS_FAILURE, MessageSupplier.EXCEPTION_MESSAGE.get(),"Invalid objectType found: " + objectType);
}
}
}
public Object add(RequestDto requestDto) throws VEnableBusinessException {
Object res=null;
logModel.getExecutionSteps().add("Starting Executing Request For ADD Apis : " + requestDto);
Object module=moduleResolverFactory.getModule(requestDto.getObjectType());
logModel.getExecutionSteps().add("Fetched Module For : " + UtilFunctions.orgAppMessage.apply(requestDto.getClientId(), requestDto.getProjectId(), requestDto.getEnvironment()));
res = ((DeeModuleService)(module)).add(requestDto);
logModel.getExecutionSteps().add("Api Added : " + requestDto);
return res;
}
在上面的代码中,我正在施放对象,但是我不希望这个动态,因为将来它可能100型
我发现做这种事情的最佳方法是将接口作为参数传递:
@Service
public class ModuleResolverFactory {
@Autowired
private ApplicationContext context;
public <T> T getModule(Class<T> objectType) {
return context.getBean(objectType);
}
}
可能是您的两个顶级接口以扩展一个常见的父界面。然后,父接口可以声明" add(requestdto("
然后,您可以在出厂方法中返回parent Interface。