Estou tentando inserir duas ou mais anotações do mesmo tipo em um único elemento, neste caso, um método. Este é o código aproximado com o qual estou trabalhando:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Ao compilar o acima, javac reclama sobre uma anotação duplicada:
max @ upsight: ~ / work / daybreak $ javac Dupe.java Dupe.java:5: anotação duplicada
Simplesmente não é possível repetir anotações como esta? Pedanticamente falando, as duas instâncias de @Foo acima não são diferentes devido ao fato de seus conteúdos serem diferentes?
Se isso não for possível, quais são algumas soluções alternativas?
ATUALIZAÇÃO: fui solicitado a descrever meu caso de uso. Aqui vai.
Estou construindo um mecanismo de sintaxe açucarado para "mapear" POJOs para armazenamentos de documentos como o MongoDB. Quero permitir que os índices sejam especificados como anotações nos getters ou setters. Aqui está um exemplo inventado:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Obviamente, eu quero ser capaz de encontrar rapidamente instâncias de Employee por várias propriedades de Project. Posso especificar @Index duas vezes com valores expr () diferentes ou adotar a abordagem especificada na resposta aceita. Mesmo que o Hibernate faça isso e não seja considerado um hack, eu acho que ainda faz sentido pelo menos permitir várias anotações do mesmo tipo em um único elemento.