Java注解,属性值必须是常量。

huangapple go评论82阅读模式
英文:

Java annotation, Attribute value must be constant

问题

我在Java中看到,当我将注解用于一个方法,就像这样是不可能的。它会给出"属性必须是常量"的错误。

private static final String CONSTANT = MyClass.class.getCanonicalName();

@Timed(CONSTANT) //属性值必须是常量
@CircuitBreaker(name = CONSTANT) //属性值必须是常量
public String something(String something) {

强调一下,我在这里使用@Timed和@CircuitBreaker只是作为示例。许多其他注解也会产生完全相同的问题。

在Java中如何做呢?我的意思是,我不想在这里像这样硬编码值。

@Timed("MyClass") @CircuitBreaker(name = "MyClass")
英文:

I see in Java when I use annotation to a method like this is not possible. It gives "Attribute must be a constant"

private static final String CONSTANT = MyClass.class.getCanonicalName();


@Timed(CONSTANT) //Attribute value must be constant
@CircuitBreaker(name = CONSTANT) //Attribute value must be constant
public String something( String something ) {

To emphasize, I am using @Timed and @CircuitBreaker here as example. Many other annotations will yield the exact same issue.

How to do it in Java? I mean, I do not want to hardcode the value here like such.

@Timed("MyClass") @CircuitBreaker(name = "MyClass")

答案1

得分: 4

私有的静态的最终的 字符串 常量 = MyClass.class.getCanonicalName();

这些是修饰符:`私有的 静态的 最终的`

这是数据类型/对象类型:`字符串`

这是您的常量/变量/对象的名称:`常量`

这是初始化程序:`=`

这是属性:`MyClass.class.getCanonicalName();`

您的属性不是常量因此您不能初始化您的常量 `常量`。
英文:
private static final String CONSTANT = MyClass.class.getCanonicalName();

These are the modifiers: private static final

This is the data-type/object-type: String

This is the name of your constant/variable/object: CONSTANT

This is the initiator: =

This is the attribute: MyClass.class.getCanonicalName();

Your attribute is not a constant, hence you can't initiate your constant CONSTANT.

huangapple
  • 本文由 发表于 2020年10月24日 18:13:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/64512253.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定