gpt4 book ai didi

java - 如何基于注解(类似于Android R)自动生成具有静态成员的类

转载 作者:行者123 更新时间:2023-12-03 06:15:34 24 4
gpt4 key购买 nike

假设我有这个:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Config {

}

@Config
public class ConfigA {
public static final String FOO_A = "A";
}

@Config
public class ConfigB {
public static final String FOO_B = "B";
public static final String SOMETHING_ELSE = "SE";
}

我想自动生成一个如下所示的类:
public class Result {
public static final String FOO_A = "A";
public static final String FOO_B = "B";
public static final String SOMETHING_ELSE = "SE";
}

忽略冲突的机会,我该如何实现?

最终目标是根据构建类型/风格自动使用Gradle生成Result,并且由于我使用Eclipse创建了一个生成器,该生成器可以生成Result以便能够使用源中的成员。 (就像Android项目中的R文件是从XML文件生成的,但我不想使用XML)

最佳答案

我将执行以下操作:

  • 创建一个单独的项目(例如,名为codegen)以包含类生成逻辑。在这里,我将使用Reflections扫描用@Config注释的类,将其所有成员添加到列表中,最后使用Velocity或类似的模板库与这些成员一起输出一个类。
  • 将您的@Config注释和要注释的类放入自己的Gradle项目中,例如,名为config
  • 在build.gradle文件中,创建一个任务(例如processConfig),该任务在从#2生成的类上运行模板工具。
  • 让Gradle项目依赖于solution来使用模板化输出(例如,名为processConfig),并将其输出添加到自定义SourceSet中。

  • 只要正确配置了源集,并确保主源集取决于中间源集,其余 solution构建就应该可以正常工作。

    另外,还有更多使用ASM或cglib来直接生成字节码的可行方法。

    关于java - 如何基于注解(类似于Android R)自动生成具有静态成员的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31038833/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com