Учитывая универсальный интерфейс, такой как
interface DomainObjectDAO<T>
{
T newInstance();
add(T t);
remove(T t);
T findById(int id);
// etc...
}
Я хотел бы создать подынтерфейс, который определяет параметр типа:
interface CustomerDAO extends DomainObjectDAO<Customer>
{
// customer-specific queries - incidental.
}
Реализация должна знать фактический тип параметра шаблона, но, конечно, средство стирания типа недоступно во время выполнения.Есть ли какая-нибудь аннотация, которую я мог бы включить, чтобы объявить тип интерфейса?Что-то вроде
@GenericParameter(Customer.class)
interface CustomerDAO extends DomainObjectDAO<Customer>
{
}
Реализация может затем извлечь эту аннотацию из интерфейса и использовать ее в качестве замены для доступа к универсальному типу во время выполнения.
Некоторый фон:
Этот интерфейсреализован с использованием динамических прокси JDK, как указано здесь .Неуниверсальная версия этого интерфейса работала хорошо, но было бы лучше использовать универсальные шаблоны и не нужно создавать методы в подинтерфейсе только для указания типа объекта домена.Обобщения и прокси-серверы заботятся о большинстве вещей, но фактический тип необходим во время выполнения для реализации метода newInstance
, среди прочего.