Указать универсальные шаблоны в расширении интерфейса

Должен ли я указывать конкретный тип для общих типов при расширении интерфейса другим интерфейсом?

Что я имею в виду есть, если у меня есть интерфейс:

public interface Repo<T>{
      Collection<T> search(String params);
      T get(String id);
}

, а затем целая куча конкретных репозиториев, таких как ClientRepo , CustomerRepo и т. д.… разумно ли указать тип T при расширении этого интерфейса, например:

public interface ClientRepo extends Repo<Client>{
}
public interface CustomerRepo extends Repo<Customer>{
}

где Клиент и Клиент - это всего лишь несколько классов.

Была ли у кого-нибудь подобная проблема? То есть я мог бы сделать:

public interface ClientRepo<T> extends Repo<T>{
}

Приложение : Возможно, мне следует более четко заявить о своем намерении иметь конкретные репозитории (например, ClientRepo). Существует еще один интерфейс, называемый RepoFactory , который возвращает соответствующее Repo клиенту, например:

public interface RepoFactory{
      ClientRepo createClientRepo();
      CustomerRepo createCustomerRepo();
}

Эта фабрика реализуется разработчиками , которые, в свою очередь, предоставляют соответствующие реализации конкретных Repos.

Фактически из вышеизложенного можно сказать, что интерфейс Repo не используется клиентом api.

Достаточно запутанно, надеюсь !!! Извините: (

8
задан Andriy Drozdyuk 28 March 2011 в 15:55
поделиться