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 中没有数组常量,也没有编译时字符串格式),这是一个很大的维护问题。
我想知道是否有任何 Java 预处理器可以与 Maven 配合良好?
最佳答案
你可以试试我的预处理器https://github.com/raydac/java-comment-preprocessor它支持maven 示例(不是最佳解决方案,但它有效)
package com.mycompany.mavenproject1;
//#local GRANTED="\"new\")"
@Anno(/*$GRANTED$*//*-*/"default to be used without preprocessor")
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
关于用于在注释中共享代码的 Java 预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385017/