以动态方式提供的 Java 注释值

标签 java annotations

我想为一些方法生成的一些值提供注解。

到目前为止我已经试过了:

public @interface MyInterface {
    String aString();
}

@MyInterface(aString = MyClass.GENERIC_GENERATED_NAME)
public class MyClass {

    static final String GENERIC_GENERATED_NAME = MyClass.generateName(MyClass.class);

    public static final String generateName(final Class<?> c) {
        return c.getClass().getName();
    }
}

以为 GENERIC_GENERATED_NAMEstatic final,它提示说

The value for annotation attribute MyInterface.aString must be a constant expression

那么如何实现呢?

最佳答案

无法动态生成注释中使用的字符串。编译器在编译时评估 RetentionPolicy.RUNTIME 注释的注释元数据,但 GENERIC_GENERATED_NAME 直到运行时才知道。并且您不能将生成的值用于 RetentionPolicy.SOURCE 的注释,因为它们在编译后被丢弃,因此这些生成的值将永远不为人知。

关于以动态方式提供的 Java 注释值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636201/

相关文章:

java - Spring 错误 - java.lang.NoSuchMethodError : > org. springframework.beans.factory.annotation.InjectionMetadata.<init>

java - 在 Java 中获得文本用户界面(类似 ncurses)功能的最佳方式是什么?

java - 使用不带注释 @Projection 的投影

ios - swift MapKit 不显示注释引脚

scala - 使方法实际内联

java - 带有单个字母的正则表达式无法识别

java - Lambda 和 putIfAbsent

java - 在自己的线程中运行的 Spring Bean

java - Hibernate搜索模糊超过2

Symfony2 Doctrine : redefine annotation in a inheritance class from another bundle