如何处理Java中的参数区分?

wil*_*ing 1 java

我需要一个需要不同参数的方法,并根据参数表现不同,如下例所示:

public void doSomething(A a, B b, C c) {
    doSomeGeneralStuff();

    if a.isPresent() {
        doSomethingWithA();
    }
    if b.isPresent() {
        doSomethingWithB();
    }
    if c.isPresent() {
        doSomethingWithC();
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是:

public void doSomething(A a) {
    doSomeGeneralStuff();
    doSomethingWithA();
}
public void doSomething(B b) {
    doSomeGeneralStuff();
    doSomethingWithB();
}
public void doSomething(C c) {
    doSomeGeneralStuff();
    doSomethingWithC();
}
Run Code Online (Sandbox Code Playgroud)

但是在第二个例子中我会有一堆冗余代码,这就是为什么我仍然不满意.还有哪些其他模式处理这个问题?

Pet*_*rey 8

您可以使用继承.有一个共同的界面,所有A,BC.

public void doSomething(Common abc) {
    doSomeGeneralStuff();
    abc.doSomethingWithABC();
}

interface Common {
    void doSomethingWithABC();
}

class A implements Common {

class B implements Common {

class C implements Common {
Run Code Online (Sandbox Code Playgroud)