我的应用程序中的实体类声明了一个像
这样的数字常量public static final int MAX_VALUE = 999;
此常量已在应用程序的不同部分中使用。
现在我想在参数注释的restful服务中使用这个常量。问题是注释@DefaultValue需要一个字符串而不是一个int。所以我尝试使用String.valueOf
来获取字符串
@DefaultValue(String.valueOf(PDCRuleMapping.MAX_VALUE)) final int upperBound,
但是它没有编译,因为
注释属性DefaultValue.value的值必须是常量表达式
我可以重复使用我的数字常量以某种方式获取常量字符串表达式,还是必须编写"999"
?
答案 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不允许方法调用,仅允许运算符。