繁体   English   中英

将数字常量转换为常量字符串表达式

[英]Converting a numeric constant to a constant string expression

我的应用程序中的实体类声明了一个数字常量,如

public static final int MAX_VALUE = 999;

此常量已在应用程序的不同部分中使用。

现在我想在参数注释中的宁静服务中使用这个常量。 问题是注解@DefaultValue需要一个字符串而不是一个int。 所以我尝试使用String.valueOf来获取字符串

@DefaultValue(String.valueOf(PDCRuleMapping.MAX_VALUE)) final int upperBound,

但它不会编译,因为

注释属性 DefaultValue.value 的值必须是常量表达式

我可以重用我的数字常量以某种方式获得一个常量字符串表达式,还是我必须写"999"

到目前为止,唯一对我有用的解决方法是定义一个 String 常量,如下所示:

public static final String MAX_VALUE_AS_STRING = "" + MAX_VALUE;
@DefaultValue(MAX_VALUE_AS_STRING) final int upperBound;

或者,您可以直接在注释中使用字符串连接:

@DefaultValue("" + MAX_VALUE) final int upperBound;

请记住,此上下文中所需的常量表达式不允许方法调用,仅允许运算符。

我认为你只有两个选择:

  • 在注释中使用字符串文字@DefaultValue("999")
  • 或声明一个字符串常量:

     public static final int MAX_VALUE = 999; private static final String MAX_VALUE_STRING = "" + MAX_VALUE; @DefaultValue(MAX_VALUE_STRING)

    如果您在注释中使用该值的唯一地方是在一个类中,您可能希望在该类中将字符串常量声明为私有。

基于String类型的第一个常量定义一个新常量,并在注释中使用该常量。

public static final int MAX_VALUE = 999;
public static final String MAX_VALUE_AS_STRING = String.valueOf(MAX_VALUE);

然后您可以拥有以下内容,而无需复制最大值的值:

@DefaultValue(PDCRuleMapping.MAX_VALUE_AS_STRING) final int upperBound;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM