JSR 308建议向 Java 添加类型注释。批准后,程序员将能够在当前允许 Java 类型的任何地方添加注释。这不仅包括方法/字段/本地/参数装饰,还包括构造函数调用、类型转换和最奇怪的 instanceof 检查。Checker 框架使用JSR 308 来实现类型限定符@NonNull
,例如对象类型或@Regex
字符串。
现在,Checkers 所做的就是静态分析您的代码。这就是所有编译时检查。没关系。但我想要的是一种可以在运行时进行检查的机制。您可以声明:
@Regex String p1 = "[a-z]+";
@Regex String p1 = "[a-z)+"; // compile time error from annotation processor
我也可以写:
if (x instanceof @Regex String) ...
但这与 没有区别x instanceof String
,不执行运行时检查。我需要一个编译时注释处理器或运行时字节码操纵器,它可以让我在instanceof
检查时运行任意代码并返回一个布尔值。Java可以做到这一点吗?