Вы можете создать класс Wrapper
, который может принимать PaymentChangeMaintenanceFieldsV214Type
или PaymentChangeMaintenanceCommonFieldsV214Type
(или A
и B
в тестовом коде здесь) и делегировать ваши вызовы базовым объектам.Каждый раз, когда вы получаете экземпляр A
или B
, вы создаете экземпляр Wrapper
и используете его.Таким образом, дублирование кода ограничено: Wrapper
:
import java.util.Random;
public class Main {
private final Random rand = new Random();
public static void main(final String[] args) {
new Main().test();
}
void test(){
for (int i = 0; i < 10 ; i++){
Object obj = getData(); //obj can be either A or B
Wrapper w = new Wrapper(obj); //construct a Wrapper
System.out.println(w.getName()); //use it
}
}
Object getData(){ //generate objects for testing
return rand.nextBoolean() ? new A() : new B(); // returns A half the times
}
}
class Wrapper {
Object obj;
Wrapper(Object obj){ //throw an exception if obj is not an A or B
this.obj = obj;
}
String getName(){
return obj instanceof A ? ((A)obj).getName() : ((B)obj).getName() ;
}
}
//two classes implementing the same method without having a common interface
class A {
String getName() { return getClass().getSimpleName(); }
}
class B {
String getName() { return getClass().getSimpleName(); }
}
Создав подходящую оболочку, вы можете заставить свой метод принимать оба типа, изменив одну строку:
MyWrapper recentPcmFieldType = new MyWrapper(getData());