泛型接口继承Java



首先我将显示我的代码。我有这个通用接口:

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);
    }

根据我对你代码的一点了解和理解,你正在尝试在你的情况下实现某种算法,创建某种类型的对象创建。因此,您可以选择广为接受的设计模式,如策略模式。策略模式

最新更新