Java 强制执行常量的编译时最小值的注释?
Java Annotation to enforce a compile-time minimum value of a constant?
我在宽松地使用术语“常量”。我特别指的是 public static int
,编译器可以将其视为立即数。
我有遗留代码确保以以下不雅的方式将值设置为 3 或更大:
public SomeClass
{
public static final int BORDER;
static
{
BORDER = 3;
if (BORDER < 3) throw new UnsupportedOperationException(
String.format("This program was compiled with a BORDER of [%d], "+
"and a value of 3 or greater MUST be used.", BORDER));
}
}
我正在寻找可以在编译时强制执行此操作的标准注释。
我想象类似于
@Min(3)
public static final int BORDER=2; //compile-time error
或
@Enforce("BORDER >= 3")
public static final int BORDER=2; // compile-time error
是否存在近似于此的设施?
Constant Value Checker of the Checker Framework has an @IntRange
注释可以满足您的需求。
如果像这样注释变量的类型:
@IntRange(from=0, to=11) int month;
然后在编译时,编译器将在程序中的任何地方发出错误,即 month
可能取值超出 0..11 范围。您可以只写一个边界;在你的情况下,你会使用
public static final @IntRange(from=3) int BORDER=2; // compile-time error
我在宽松地使用术语“常量”。我特别指的是 public static int
,编译器可以将其视为立即数。
我有遗留代码确保以以下不雅的方式将值设置为 3 或更大:
public SomeClass
{
public static final int BORDER;
static
{
BORDER = 3;
if (BORDER < 3) throw new UnsupportedOperationException(
String.format("This program was compiled with a BORDER of [%d], "+
"and a value of 3 or greater MUST be used.", BORDER));
}
}
我正在寻找可以在编译时强制执行此操作的标准注释。
我想象类似于
@Min(3)
public static final int BORDER=2; //compile-time error
或
@Enforce("BORDER >= 3")
public static final int BORDER=2; // compile-time error
是否存在近似于此的设施?
Constant Value Checker of the Checker Framework has an @IntRange
注释可以满足您的需求。
如果像这样注释变量的类型:
@IntRange(from=0, to=11) int month;
然后在编译时,编译器将在程序中的任何地方发出错误,即 month
可能取值超出 0..11 范围。您可以只写一个边界;在你的情况下,你会使用
public static final @IntRange(from=3) int BORDER=2; // compile-time error