首先我将显示我的代码。我有这个通用接口:
BaseWebserviceCool:
public interface BaseWebserviceCool<I extends SessionPeticionBaseBean, O extends WsRespuestaBaseBean> {
O create(I wsRequest);
O read(I wsRequest);
O update(I wsRequest);
void delete(I wsRequest);
}
SessionPeticionBean:
public class SessionPeticionBaseBean implements Serializable {
private String token;
private String uuidUsuarioLogado;
}
WsRespuestaBean:
public class WsRespuestaBaseBean implements Serializable
{
private String codigoRespuesta;
private String mensajeRespuesta;
private boolean error;
private Map<String, String> errors;
}
跳过getter和setter。然后,我有另一个特定的接口,扩展上述基本接口如下: WsPersonasInterface:
public interface WsPersonasInterface<I extends SessionPeticionBaseBean, O extends WsRespuestaBaseBean>
extends BaseWebserviceCool<I, O>
{
}
关键是我的web控制器必须通过特定的接口(WsPersonasInterface)实现基接口方法。在我的控制器中,我这样做:
public class PersonasController extends BaseController
implements BaseWebserviceCool<SessionPeticionBaseBean, WsRespuestaBaseBean>
{
@RolesAllowed({ "ROLE_USER" })
@RequestMapping(value = "/create/", method = { RequestMethod.POST }, headers = "Accept=application/xml, application/json")
@Override
public CreatePersonaWsRespuestaBean create(
@RequestBody @Valid CreatePersonaWsPeticionBean createPersonaPeticionBean) {
return personasBusiness.createPersona(createPersonaPeticionBean);
}
@Override
public @ResponseBody PersonaWsRespuestaBean read(
@RequestBody @Valid ReadPersonaWsPeticionBean readPersonaWsPeticionBean) {
return personasBusiness.readPersona(readPersonaWsPeticionBean);
}
为简洁起见,我跳过了其余的方法。但是这个实现/重写失败了。
在我的控制器中, createpersonawsrespuestean和personawsrespuestean是继承自wsrespuestean和createpersonawspectiononbean的类,readpersonawspectiononbean继承自SessionPeticionBaseBean。
这肯定是一个设计问题,有没有聪明的人可以给一些建议?
改变你的控制器方法的签名以尊重你实现的契约(你的接口BaseWebserviceCool
):
public class PersonasController extends BaseController
implements BaseWebserviceCool<SessionPeticionBaseBean, WsRespuestaBaseBean>
{
@RolesAllowed({ "ROLE_USER" })
@RequestMapping(value = "/create/", method = { RequestMethod.POST }, headers = "Accept=application/xml, application/json")
@Override
public WsRespuestaBaseBean create(
@RequestBody @Valid SessionPeticionBaseBean createPersonaPeticionBean) {
return personasBusiness.createPersona(createPersonaPeticionBean);
}
@Override
public @ResponseBody WsRespuestaBaseBean read(
@RequestBody @Valid SessionPeticionBaseBean readPersonaWsPeticionBean) {
return personasBusiness.readPersona(readPersonaWsPeticionBean);
}
根据我对你代码的一点了解和理解,你正在尝试在你的情况下实现某种算法,创建某种类型的对象创建。因此,您可以选择广为接受的设计模式,如策略模式。策略模式