public interface MainInterface {
}
@Transactional
@Service
@Qualifier("A")
@Primary
public class A implements MainInterface {
}
@Transactional
@Service
@Qualifier("B")
public interface B implements MainInterface {
}
public interface C implements MainInterface {
}
@Service
public class InterfaceFactory {
public MainInterface getInstance(String type ) {
if (type.equalsIgnoreCase("A") ) {
return new A();
} else if (type.equalsIgnoreCase("B") ) {
return new B();
} else if (type.equalsIgnoreCase("C") ) {
return new C();
}else {
return null;
}
}
}
@Service
public class EventInterceptor {
public ADTO callEvent(A a, Entity entity) throws URISyntaxException {
System.out.print("A");
}
public ADTO callEvent(B b, Entity entity) throws URISyntaxException {
System.out.print("B");
}
public ADTO callEvent(C c, Entity entity) throws URISyntaxException {
System.out.print("C");
}
public ADTO callEvent(MainInterface m, Entity entity) throws
URISyntaxException {
System.out.print("MainInterface );
}
}
//------------ i'm calling it like so
MainInterface obj= interfaceFactory.getInstanceInterface("A");
gateWayInterceptor.callEvent( obj,entity)));
Проблема в том, что он всегда печатает MainInterface
и всегда вводит callEvent (MainInterface m, Entity entity), даже если тип возвращаемого значения A, или B, или C, это открыто, закрыто. Принцип реализации, как я понимаю,
Я пытался сделать его универсальным типом фабрики, но не смог попытаться удалить callEvent (MainInterface m, Entity entity), но я получил исключение, я сделал то же самое, что и код здесь в этом блоге https://blog.jetbrains.com/upsource/2015/08/31/what-to-look-for-in-a-code-review-solid-principles-2/о продано - открыть закрыть Принцип
должен вводить callEvent (A a, сущность сущности), а не callEvent (MainInterface m, сущность сущности)
Обратите внимание, что я использую Java 8