猿问

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

我正在使用一些无法修改的类

  • 通用请求

  • 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?


12345678_0001
浏览 240回答 1
1回答

慕桂英3389331

这是一个著名的模式适配器。代码看起来像这样: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不惜一切代价))
随时随地看视频慕课网APP

相关分类

Java
我要回答