java有没有办法避免这个“属性值必须是常量”错误?
我们构建了一个注释,用于验证方法的输入。大概是这样的:
@InputValidation(paramName = "foo", regularExpression = RegularExpressionConstants.FOO_REG_EX)
我们的RegularExpressionConstants
类有大量不同的字符串常量,它们都表示不同的正则表达式。这个类开始看起来很混乱,所以我开始尝试用一些方法来整理它,使它更容易阅读,等等。所以这个类现在看起来像这样:
public static final String FOO_REG_EX = alphanumericWithRange(1, 16);
public static final String BAR_REG_EX = alphanumericWithRange(2,4);
private static String alphanumericWithRange(int lowerLimit, int upperLimit) {
"[a-zA-Z0-9]{" + lowerLimit + "," + upperLimit + "}";
}
RegularExpressionConstants类可以编译,但注释不再编译。错误是Attribute value must be constant
。在查看了有关StackOverflow的一些相关问题后,我理解了为什么会发生这种情况。我主要想知道是否有任何方法可以在不引起此问题的情况下实现constants类中所需的整洁度?还是我要处理很多杂乱的常数
# 1 楼答案
可以使用枚举而不是字符串常量列表:
使用枚举还允许在定义模式的地方移动
name
元数据并且可以使用枚举应用注释:
在处理注释的地方,只需调用:
# 2 楼答案
除非您遵循ernest's suggestion并重构代码,否则您就不能这样做。您案例中缺少的部分是
JSL
的强制执行(编译时常量是什么)而调用一个方法根本不是;即使你能看出这是一个常数,编译器也不能也不会