为了账号安全,请及时绑定邮箱和手机立即绑定

调用两个不同类的相同方法

调用两个不同类的相同方法

12345678_0001 2021-04-27 17:38:46
我正在使用一些无法修改的类:通用请求SpecificRequest1(扩展GenericRequest)SpecificRequest2(扩展GenericRequest)这两个SpecificRequest类都共享许多方法(但是这些方法未在GenericRequest中声明,我知道这很不好,但是我无法更改)。我想创建一个像这样的方法(尽可能分解):private void fillRequest( GenericRequest p_request, boolean p_specificModeOne ) {    if( p_specificModeOne ) {        SpecificRequest1 l_specificRequest = (SpecificRequest1) p_request;    }    else {        SpecificRequest2 l_specificRequest = (SpecificRequest2) p_request;    }    l_specificRequest.commonMethod1();    l_specificRequest.commonMethod2();}我知道这不是有效的Java,但这就是想法。您是否认为可以对此做一些干净的事情?还是我必须创建两种不同的方法来处理SpecificRequest1和SpecificRequest2?
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

这是一个著名的模式适配器。代码看起来像这样:


class GenericRequest {}


class SpecificRequest1 extends GenericRequest {

    void method1() {

        System.out.println("specific1");

    }

}


class SpecificRequest2 extends GenericRequest {

    void method2() {

        System.out.println("specific2");

    }

}


interface ReqInterface {

    void method();

}


class Specific1 implements ReqInterface {

    private final SpecificRequest1 req =new SpecificRequest1();


    @Override

    public void method() {

        req.method1();

    }

}


class Specific2 implements ReqInterface {

    private final SpecificRequest2 req =new SpecificRequest2();


    @Override

    public void method() {

        req.method2();

    }

}


public class Production {

    void method(ReqInterface req) {

        req.method();

    }


    public static void main(String[] args) {

        Production l3 = new Production();

        l3.method(new Specific1());

        l3.method(new Specific2());

    }

}

尝试避免任何方法参数中的布尔值,instanceof不惜一切代价))


查看完整回答
反对 回复 2021-05-19
  • 1 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信