我有一个方法,当作为参数传递时,对4种不同类的类执行相同的任务。目前,我必须为所有4个类编写该方法4次。例如:
doSomethingForClass1(MyClass1 myclass1, Address address);
doSomethingForClass2(MyClass2 myclass2, Address address);
doSomethingForClass3(MyClass3 myclass3, Address address);
doSomethingForClass4(MyClass4 myclass4, Address address);
所有这些方法都做同样的事情并返回相同的对象。如何将其合并为一个方法并传递不同的对象?
答案 0 :(得分:5)
如果你的所有4个类都可以实现相同的接口,比如IMyClass,那么你可以使用一个方法。
doSomethingForClass1(IMyClass myclass, Address address);
虽然这可能无法实现,也可能对您的申请没有意义。但是,如果这确实有意义,也可以考虑将该方法放在界面中。 e.g。
public interface IMyClass {
public void doSomethingWithAnAddress(Address address);
}
然后你的代码变得更加简单,
myClass.doSomethingWithAnAddress(address);
P.S。你也可以有一个共同的抽象基类而不是接口。
答案 1 :(得分:1)
一个可能的解决方案是让你的MyClassX类从同一个超类或接口扩展,然后创建一个使用超类或接口参数的方法 - 换句话说就是有一个超级类型< / em>的
doSomethingForClass(MySuperType superType, Address address) {
// ...
}
让你的班级共享一个界面
class MyClass1 implements MySuperType {
//....
}
和,...
class MyClass2 implements MySuperType {
//....
}
等...
为此,doSomethingForClass(...)
方法只能调用接口中定义的方法。
答案 2 :(得分:1)
如果他们做同样的事情,他们怎么接受完全不同的对象?如果“做同样的事情”你的意思是“调用完全相同的方法”,看起来所有的MyClass?
类型应该有一个共同的接口/超类,收集所有常用方法:
public MyClass1 implements MyClass {/*...*/}
public MyClass2 implements MyClass {/*...*/}
public MyClass3 implements MyClass {/*...*/}
public MyClass4 implements MyClass {/*...*/}
现在利用多态性:
doSomethingForClass(MyClass myclass, Address address);
答案 3 :(得分:1)
编辑:正如您将从评论中注意到的那样,我们强烈劝阻我的代码示例中使用的做法,特别是作为初学者。不过,它仍然在这里供您参考。
我认为你想要探索继承和多态。或者,我想一个丑陋的解决方案是将你的MyClass参数“提升”为Object,然后是:
myMethod(Object myClass, Address address){
if(myClass instanceof MyClass1){
MyClass1 mc = (MyClass1) myClass;
doStuff();
}
else if(myClass instanceof MyClass2){
MyClass2 mc = (MyClass2) myClass;
doStuff();
}
else if(myClass instanceof MyClass3){
MyClass3 mc = (MyClass3) myClass;
doStuff();
}
else if(myClass instanceof MyClass4){
MyClass4 mc = (MyClass4) myClass;
doStuff();
}
else panic();
}
这至少可以解决整合部分。遗传和多态性会更加性感。
答案 4 :(得分:0)
如果你需要对这4个类执行相同的操作,使用完全相同的方法调用,......这些类可能实现相同的接口或从同一个超类扩展。在这种情况下,您可以针对该接口/抽象类进行编程
doSomething( Interface myClass, Address address);