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

时间:2016-04-22 10:14:53

标签: java constants

我的应用程序中的实体类声明了一个像

这样的数字常量
public static final int MAX_VALUE = 999;

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

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

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

但是它没有编译,因为

  

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

我可以重复使用我的数字常量以某种方式获取常量字符串表达式,还是必须编写"999"

3 个答案:

答案 0 :(得分:2)

根据类型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;

答案 1 :(得分:1)

我认为你只有两个选择:

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

    public static final int MAX_VALUE = 999;
    private static final String MAX_VALUE_STRING = String.valueOf(MAX_VALUE);
    @DefaultValue(MAX_VALUE_STRING)
    

    如果在注释中使用该值的唯一位置是在一个类中,则可能需要在该类中声明字符串常量为private。

答案 2 :(得分:1)

到目前为止,对我来说唯一可行的解​​决方法是定义一个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;

请记住,在这种情况下,constant expressions不允许方法调用,仅允许运算符。