1つの要素(この場合はメソッド)で同じタイプの2つ以上の注釈を平手打ちしようとしています。これが私が作業しているおおよそのコードです:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
上記をコンパイルすると、javacはアノテーションの重複について文句を言います。
max @ upsight:〜/ work / daybreak $ javac Dupe.java Dupe.java:5:アノテーションが重複しています
このような注釈を繰り返すことは単に不可能ですか?経験的に言えば、上記の@Fooの2つのインスタンスは、内容が異なるため違いませんか?
上記が不可能な場合、考えられる回避策は何ですか?
更新:ユースケースについて説明するように求められました。いきます
私は、MongoDBなどのドキュメントストアにPOJOを「マップ」するための、構文の糖度の高いメカニズムを構築しています。インデックスをゲッターまたはセッターの注釈として指定できるようにしたいのですが。これは不自然な例です:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
明らかに、ProjectのさまざまなプロパティでEmployeeのインスタンスをすばやく検索できるようにしたいと考えています。@Indexを異なるexpr()値で2回指定するか、受け入れられた回答で指定されたアプローチを取ることができます。Hibernateはこれを実行し、ハックとは見なされませんが、少なくとも1つの要素で同じタイプの複数のアノテーションを使用できるようにすることは、依然として理にかなっていると思います。