Estoy intentando copiar dos o más anotaciones del mismo tipo en un solo elemento, en este caso, un método. Aquí está el código aproximada que estoy trabajando con:Anotaciones múltiples del mismo tipo en un elemento?
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 de duplicado:
[email protected]:~/work/daybreak$ javac Dupe.java Dupe.java:5: duplicate annotation
¿Es simplemente no es posible repetir las anotaciones de este tipo? Pedadicamente hablando, ¿no son las dos instancias de @Foo superiores diferentes debido a que sus contenidos son diferentes?
Si lo anterior no es posible, ¿cuáles son algunas soluciones posibles?
ACTUALIZACIÓN: Me han pedido que describa mi caso de uso. Aquí va.
Estoy construyendo un mecanismo de sintaxis azucarada para "mapear" POJOs para documentar tiendas como MongoDB. Quiero permitir que los índices se especifiquen como anotaciones en los getters o setters. Aquí está 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 ser capaz de encontrar rápidamente las instancias de la plantilla por varias propiedades del proyecto. Puedo especificar @Index dos veces con diferentes valores de expr() o tomar el enfoque especificado en la respuesta aceptada. Aunque Hibernate hace esto y no se considera un hack, creo que todavía tiene sentido permitir al menos tener varias anotaciones del mismo tipo en un solo elemento.
Hay una esfuerzo para que esta regla duplicada se relaje para permitir su programa en Java 7. ¿Puede describir su caso de uso, por favor? – notnoop
He editado mi pregunta con una descripción de por qué quiero hacer esto. Gracias. –
Podría ser útil en CDI para permitir que se proporcione un frijol para múltiples calificadores. Por ejemplo, acabo de intentar reutilizar un bean en dos lugares calificándolo "@Produces @PackageName (" test1 ") @PackageName (" test2 ")" –