Estoy intentando agregar dos o más anotaciones del mismo tipo en un solo elemento, en este caso, un método. Aquí está el código aproximado con el que estoy trabajando:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Al compilar lo anterior, javac se queja de una anotación duplicada:
max @ upsight: ~ / trabajo / amanecer $ javac Dupe.java Dupe.java:5: anotación duplicada
¿Simplemente no es posible repetir anotaciones como esta? Hablando pedante, ¿no son las dos instancias de @Foo anteriores diferentes debido a que sus contenidos son diferentes?
Si lo anterior no es posible, ¿cuáles son algunas posibles soluciones?
ACTUALIZACIÓN: Me han pedido que describa mi caso de uso. Aquí va.
Estoy construyendo un mecanismo de sintaxis azucarado para "mapear" POJOs a almacenes de documentos como MongoDB. Quiero permitir que los índices se especifiquen como anotaciones en los captadores o definidores. Aquí hay un ejemplo artificial:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Obviamente, quiero poder encontrar rápidamente instancias de Employee por varias propiedades de Project. Puedo especificar @Index dos veces con diferentes valores expr (), o tomar el enfoque especificado en la respuesta aceptada. Aunque Hibernate hace esto y no se considera un truco, creo que todavía tiene sentido permitir al menos tener múltiples anotaciones del mismo tipo en un solo elemento.