Допустим, я хотел определить интерфейс, который представляет собой вызов удаленного сервиса. Теперь вызов удаленной службы обычно что-то возвращает, но может также включать входные параметры. Предположим, что реализующий класс обычно реализует только один метод службы. Учитывая приведенную выше информацию, следующий плохой дизайн (это не совсем правильно):
public interface IExecutesService<A,B>
{
    public A executeService();
    public A executeService(B inputParameter);
}
 Теперь предположим, что я реализую этот интерфейс с помощью класса, который выполняет удаленный сервис с входным параметром:
public class ServiceA implements IExecutesService<String,String>
{
  public String executeService()
  {
    //This service call should not be executed by this class
    throw new IllegalStateException("This method should not be called for this class...blabla");
  }
  public String executeService(String inputParameter)
  {
    //execute some service
  }
 У меня есть два вопроса относительно вышеизложенного:
-  Является ли использование универсального интерфейса (
IExecutesService<A,B>) хорошим в случае, когда вы хотите предоставить подклассы, которые требуют различных входных параметров и типов возврата для методов интерфейса? -  Как я могу сделать выше, лучше? Т.е. я хочу сгруппировать исполнителей моих служб под общим интерфейсом (
IExecutesService); однако, реализующий класс обычно реализует только один из методов, и использование IllegalStateException кажется действительно уродливым. Кроме того, параметр типа B вIExecutesService<A,B>будет избыточным для реализующего класса, который вызывает службу без каких-либо входных параметров. Также кажется излишним создание двух отдельных интерфейсов для двух разных сервисных вызовов.