在Java类的getter中强制使用编码模板

在Java类的getter中强制使用编码模板,java,templates,getter-setter,code-analysis,Java,Templates,Getter Setter,Code Analysis,我想确保某个包中类的所有getter都遵循给定的模板 例如,所有getter的格式必须为: XXX getYYY(){ classLock.lock(); return YYY; finally{ classLock.unlock(); } } 基本上,我希望我的项目不会编译/运行,除非所有getter都是这种形式 最好的方法是什么? 我更喜欢一个可以作为Eclipse插件使用的解决方案。没有办法强制编译器执行该检查。您可能希望研究静态代码分

我想确保某个包中类的所有getter都遵循给定的模板

例如,所有getter的格式必须为:

XXX getYYY(){
    classLock.lock(); 
    return YYY;
    finally{
        classLock.unlock(); 
    }
}
基本上,我希望我的项目不会编译/运行,除非所有getter都是这种形式

最好的方法是什么?
我更喜欢一个可以作为Eclipse插件使用的解决方案。

没有办法强制编译器执行该检查。您可能希望研究静态代码分析工具,如或,并为此定义自己的规则

然后在构建周期中调用该工具,如果该检查在任何类上失败,则将其设置为致命错误


但我不确定这种getter是否能为代码提供任何级别的线程安全性。当您调用一行中的两个getter时,仍然能够读取不一致的值。

无法强制编译器执行该检查。您可能希望研究静态代码分析工具,如或,并为此定义自己的规则

然后在构建周期中调用该工具,如果该检查在任何类上失败,则将其设置为致命错误


但我不确定这种getter是否能为代码提供任何级别的线程安全性。当您连续调用两个getter时,仍然能够读取不一致的值。

您可以为此编写一个Eclipse插件

有一个用于构建器编译器(如插件)的API,您可以访问EclipseJava编译器的AST抽象语法树来执行检查

如果您对eclipse插件感兴趣,这应该不是什么大问题


您可以为此编写一个Eclipse插件

有一个用于构建器编译器(如插件)的API,您可以访问EclipseJava编译器的AST抽象语法树来执行检查

如果您对eclipse插件感兴趣,这应该不是什么大问题


为什么不在编译阶段使用或其他面向方面的框架来自动包装getter呢?您可以简单地指定要封装在一组特定类中的方法的类型,例如,并指定提供执行前/执行后的代码。

为什么不在编译阶段使用或其他面向方面的框架来自动封装getter?您可以简单地指定要封装在一组特定类中的方法类型,例如,并指定提供执行前/执行后的代码。

+1 For Brians suggestion,或者在运行时使用类似的方法,如Spring AOP。使用运行时框架的优点是不需要单独的编译器,只需从上下文文件中删除一行即可从所有方法中删除包装

+1以获得Brians建议,或者在运行时使用类似的东西,如Spring AOP。使用运行时框架的优点是不需要单独的编译器,只需从上下文文件中删除一行即可从所有方法中删除包装

你的代码无法编译。你不可能不试一下就得到一个finally block。不,你不能强迫它。即使你可以,也没有意义。线程安全不能自动执行。@克莱特斯:线程安全可以自动执行,也可以更清晰地执行:可以通过设计内置。但它将采取与Java完全不同的方法,您的代码将无法编译。你不可能不试一下就得到一个finally block。不,你不能强迫它。即使你可以,也没有意义。线程安全不能自动执行。@克莱特斯:线程安全可以自动执行,也可以更清晰地执行:可以通过设计内置。但是它将采取与Java完全不同的方法。在构建时注入之后,我是否仍然能够正确地调试代码?是的。它将使用字节码编织,因此行号等将被保留。在构建时注入之后,我是否仍然能够正确地调试代码?是的。它将使用字节码编织,因此将保留行号等。