У меня есть служебный класс OldRemote
, который устарел, но все еще будет использоваться некоторое время, пока новый класс NewRemote
не станет стабильным.И оба служебных класса имеют одинаковые имена методов и параметры, но классы pojo возвращаемого типа различны.Даже структура pojo возвращаемого типа такая же, но именование другое.
Проще говоря, оба типа возвращаемых функций - это pojo с разными именами полей.
Есть ли какой-либо общий способ обработки этого варианта использования ниже?
Я создал интерфейс службыкоторый имеет общий контракт методов как старого, так и нового класса.
public interface RemoteService {
//contract [ return type is object to receive all/any Pojo classes ]
Object turnOnTV();
static Service GetRemoteservice(boolean isOldRemote){
if(isOldRemote){
return new OldRemote();
}
return new NewRemote();
}
}
Класс OldRemote
public class OldRemote implements RemoteService{
@Override
public OldPojo turnOnTV() {
OldPojo oldPojo = new OldPojo();
System.out.println("OldPojo");
return oldPojo;
}
}
Класс NewRemote
public class NewRemote implements Service{
@Override
public NewPojo turnOnTV() {
NewPojo newPojo = new NewPojo();
System.out.println("NewPojo");
return newPojo;
}
}
Демонстрационное использование вышеприведенной реализации.
public class DemoTvRemote {
public static void main(String[] args) {
RemoteService remoteService1 = RemoteService.GetRemoteservice(true);
OldPojo oldRemote = (OldPojo) remoteService1.turnOnTV();
RemoteService remoteService2 = RemoteService.GetRemoteservice(false);
NewPojo shr = (NewPojo) Service2.test();
}
}
Этот код выше работает нормально.Но проблема в том, что я не хочу печатать приведение во всех местах, где turnOnTV()
используется во всей моей кодовой базе.Даже если мне придется это сделать, мне придется написать условие для переключения между OldPojo
и NewPojo
, где бы ни вызывался turnOnTV()
.
Есть ли способ решить эту проблему?