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