我需要一个需要不同参数的方法,并且根据参数的不同表现,如下例所示:
public void doSomething(A a, B b, C c) {
doSomeGeneralStuff();
if a.isPresent() {
doSomethingWithA();
}
if b.isPresent() {
doSomethingWithB();
}
if c.isPresent() {
doSomethingWithC();
}
}
另一种选择是:
public void doSomething(A a) {
doSomeGeneralStuff();
doSomethingWithA();
}
public void doSomething(B b) {
doSomeGeneralStuff();
doSomethingWithB();
}
public void doSomething(C c) {
doSomeGeneralStuff();
doSomethingWithC();
}
但是在第二个例子中我会有一堆冗余代码,这就是为什么我仍然不满意。还有哪些其他模式可以解决这个问题?
答案 0 :(得分:8)
您可以使用继承。为所有A
,B
和C
。
public void doSomething(Common abc) {
doSomeGeneralStuff();
abc.doSomethingWithABC();
}
interface Common {
void doSomethingWithABC();
}
class A implements Common {
class B implements Common {
class C implements Common {
答案 1 :(得分:1)
我赞同彼得·劳瑞的回答,并提出了另一种选择:
...
答案 2 :(得分:0)
为什么不将类型作为parameter
传递,类似
private void doSomething(Class<?> cls) {
if (cls == String.class) { doSomething1();
}
else if (cls == int.class) { doSomething2();
}
}
答案 3 :(得分:0)
设计一个接口 I
,它声明doSomething
并将您的类A,B和C调整为实现该接口:
class A implements I
等
然后重构doSomething
以利用变量参数列表:
void doSomething(I... eyes)
{
for (i : eyes){
doSomeGeneralStuff()
i.doSomething();
}
}
您可以使用任意数量的对象致电doSomething
,只要他们实施I
:例如,doSomething(a)
,doSomething(a, b)
,doSomething(a, b, c)
等。