Java アノテーションの属性は完全に静的な式でなければなりませんが、言語には前処理機能がないため、アノテーションでのコードの再利用は基本的に存在しません。
たとえば、次のユース ケースの代替手段はありません。
#define GRANTED {"group1", "group2"}
@Access(granted = GRANTED)
public void ...
#define USER_HAS_ACCESS(userArg, permissions) "arguments." + userArg + ".hasAccess(" + permissions + ")"
@Access(grantedIf = USER_HAS_ACCESS("usr", "modify"))
public void modifyData(User usr, Data d) ...
このような場合、マクロによって置き換えられたコードは、注釈が使用されている各場所で再生成する必要があります (Java には配列定数がなく、コンパイル時の文字列の書式設定がないため)。これはメンテナンス上の大きな問題です。
Maven でうまく動作する Java プリプロセッサはありますか?