1

假设我有一个自定义注释,如下所示:

public @interface myLimits {

    int MIN_LIMIT = 400;

    int stockLimit() default MIN_LIMIT;
}

我们可以将其外部化到属性文件中,而不是在注释定义中硬编码 MIN_LIMIT 的值吗?

如下所示 - 假设“min.limit”是在属性文件中定义的。

public @interface myLimits {

    @value("${min.limit}")
    int MIN_LIMIT;

    int stockLimit() default MIN_LIMIT;
}

如何外部化MIN_LIMIT而不是硬编码?

4

1 回答 1

1

严格来说:你不能。注释在其余代码之前在单独的编译轮中处理,这意味着出现在注释中任何位置的所有内容都必须是编译时常量。

以下是 JLS 对此的评价:

当且仅当以下条件之一为真时,元素类型 T 与元素值 V 相称:

  • T 是数组类型 E[] 并且:
    • V 是一个 ElementValueArrayInitializer,V 中的每个 ElementValueInitializer(类似于数组初始值设定项中的变量初始值设定项)都与 E 相称。
    • 或者 V 是与 T 相称的 ElementValue。
  • V 的类型与 T 的分配兼容(第 5.2 节),此外:
    • 如果 T 是原始类型或字符串,则 V 是常量表达式(第 15.28 节)。
    • V 不为空。
    • 如果 T 是 Class,或 Class 的调用,并且 V 是类文字(第 15.8.2 节)。
    • 如果 T 是枚举类型,而 V 是枚举常量。

如果元素类型与 ElementValue 不相称,则为编译时错误。

于 2012-06-19T08:32:04.497 回答