我想确保某个包中所有类的 getter 都遵循给定的模板。
例如,所有 getter 必须采用以下形式:
XXX getYYY(){
classLock.lock();
return YYY;
finally{
classLock.unlock();
}
}
基本上,我希望我的项目不会编译/运行,除非所有吸气剂都是这种形式。
最好的方法是什么?我更喜欢可以用作 Eclipse 插件的解决方案。
我想确保某个包中所有类的 getter 都遵循给定的模板。
例如,所有 getter 必须采用以下形式:
XXX getYYY(){
classLock.lock();
return YYY;
finally{
classLock.unlock();
}
}
基本上,我希望我的项目不会编译/运行,除非所有吸气剂都是这种形式。
最好的方法是什么?我更喜欢可以用作 Eclipse 插件的解决方案。
为什么不使用AspectJ(或其他一些面向方面的框架)在编译阶段自动包装你的 getter?您可以简单地指定要包装的方法的类型(例如,在一组特定的类中)并指定代码以提供前/后执行。
没有办法强制编译器进行检查。您可能想研究静态代码分析工具,例如PMD或CheckStyle,并为此定义自己的规则。
然后在您的构建周期中调用该工具,如果该检查在任何类上失败,则将其设为致命错误。
但我不确定这种 getter 是否会为您的代码提供任何级别的线程安全。当您连续调用两个 getter 时,您仍然可以读取不一致的值。
您可以为此目的编写一个 Eclipse 插件。
有一个用于构建器的 API(类似编译器的插件),您可以访问 Eclipse Java 编译器的 AST(抽象语法树)来执行检查。
如果您喜欢 Eclipse 插件,这应该没什么大不了的。
+1 对于 Brians 的建议,或者在运行时使用类似的东西,比如 Spring AOP。使用运行时框架,您的优势在于不需要单独的编译器,并且只需从上下文文件中删除一行即可从所有方法中删除包装。