Dada una interfaz genérica comoanotación para poner a disposición de tipo genérico
interface DomainObjectDAO<T>
{
T newInstance();
add(T t);
remove(T t);
T findById(int id);
// etc...
}
Me gustaría crear una subinterfaz que especifica el parámetro de tipo:
interface CustomerDAO extends DomainObjectDAO<Customer>
{
// customer-specific queries - incidental.
}
La aplicación necesita conocer la plantilla real tipo de parámetro, pero por supuesto el medio de borrado de tipo no está disponible en tiempo de ejecución. ¿Hay alguna anotación que pueda incluir para declarar el tipo de interfaz? Algo así como
@GenericParameter(Customer.class)
interface CustomerDAO extends DomainObjectDAO<Customer>
{
}
La aplicación entonces podría alcanzar esta anotación desde la interfaz y lo utilizan como un sustituto para el acceso de tipo genérico en tiempo de ejecución.
Algunos antecedentes:
Esta interfaz se implementa utilizando JDK proxies dinámicos como se indica here. La versión no genérica de esta interfaz ha funcionado bien, pero sería mejor utilizar genéricos y no tener que crear los métodos en una subinterfaz solo para especificar el tipo de objeto de dominio. Los genéricos y los proxies se encargan de la mayoría de las cosas, pero el tipo real es necesario en tiempo de ejecución para implementar el método newInstance
, entre otros.
¿Has intentado simplemente escribir tu propia anotación? –
@Lauri - No he hecho lo mío, pero podría hacer eso, veo muchas preguntas sobre genéricos y frustraciones sobre el borrado de tipos, así que espero que esto ya se haya hecho. – mdma