Sai*_*ali 4 java code-generation annotations bytecode-manipulation annotation-processing
JSR 308建议向Java添加类型注释.在批准之后,程序员将能够在当前允许Java类型的任何地方添加注释.这不仅包括方法/字段/本地/参数装饰,还包括构造函数调用,类型转换以及最奇怪的实例检查.所述检查器框架使用JSR 308来实现类型限定符像@NonNull上的对象类型,或@Regex对字符串.
现在,Checkers所做的就是静态分析你的代码.那是所有编译时间检查.没关系.但我想要的是一种可以在运行时进行检查的机制.你可以声明:
@Regex String p1 = "[a-z]+";
@Regex String p1 = "[a-z)+"; // compile time error from annotation processor
Run Code Online (Sandbox Code Playgroud)
我也可以写:
if (x instanceof @Regex String) ...
Run Code Online (Sandbox Code Playgroud)
但这没有什么不同x instanceof String,没有执行运行时检查.我需要一个编译时注释处理器或运行时字节码操纵器,它允许我在instanceof检查上运行任意代码并返回一个布尔值.这可能与Java有关吗?
小智 5
是的你可以.但它不是微不足道的,并且不受注释处理器可访问API的支持.可访问的注释处理器API仅限于生成新类,不允许修改现有的字节码(即使在JDK 8中).您可以在注释处理器级别转换为编译器特定的类,这样可以提供更多选项.但您必须使用编译器内部API并为每个可用的编译器(JDT和JavaC)重写它.你可以看一下Lombok项目(http://projectlombok.org/),它做了类似的事情.令人遗憾的是,Lombok尚未与JDK8s新型的anntotations兼容.
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |