【发布时间】:2012-09-16 09:12:03
【问题描述】:
JSR 308 提议给 Java 添加类型注解。批准后,程序员将能够在当前允许 Java 类型的任何地方添加注释。这不仅包括方法/字段/本地/参数装饰,还包括构造函数调用、类型转换和最奇怪的 instanceof 检查。 Checker Framework 使用 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可以做到这一点吗?
【问题讨论】:
标签: java annotations code-generation bytecode-manipulation annotation-processing