通用接口继承Java

时间:2015-07-14 15:31:20

标签: java oop inheritance interface

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

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

Getters和setters跳过了。 然后我有另一个特定的接口,扩展了上面的基本接口: 的 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);

    }

为简洁起见,我跳过了其余的方法。但是这种实现/覆盖失败了..

我的控制器 CreatePersonaWsRespuestaBean和PersonaWsRespuestaBean是继承自WsRespuestaBean的类,CreatePersonaWsPeticionBean和ReadPersonaWsPeticionBean继承自SessionPeticionBaseBean

肯定存在设计问题,任何聪明的心灵都会给出一些提示吗?

2 个答案:

答案 0 :(得分:0)

更改控制器方法的签名,以尊重您实施的合同(您的界面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);

    }

答案 1 :(得分:0)

根据我对您的代码的一点知识和理解,您正在尝试在您的情况下实现某些算法,创建特定类型的对象创建。因此,您可以选择像Strategy模式这样广为接受的设计模式。 Strategy Pattern