用于在注释中共享代码的 Java 预处理器

标签 java annotations preprocessor

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/

相关文章:

java - 找不到HibInputFormat类。找不到激励类Def

java - 问题 - 即使在成功处理后,Weblogic JMS 持久消息仍重新传递到 MDB

iphone - 从自定义标注跳转到 MKMap 中的另一个标注

hibernate - 是否可以在纯 JPA 中进行类型转换(从 boolean 到 yes_no)?

iphone - #ifdef 检查设备是否是 iPhone 5

java - Resteasy(多部分/表单数据): how to read multi value field values to List?

java - 我可以在我的 Web 应用程序中同时使用 Spring 和 JSF 吗

java - Annotation Processor,生成编译器错误

java - 如何配置 IntelliJ IDEA 以允许 Java 文件中的 shebang

c - BOOST_PP_SEQ_ENUM 带单引号?