Java 有没有一种方法可以使用静态代码分析来确定某一类型的所有字段是否都有注释?

Java 有没有一种方法可以使用静态代码分析来确定某一类型的所有字段是否都有注释?,java,code-analysis,static-analysis,Java,Code Analysis,Static Analysis,我有一些POJO,用于在我的应用程序及其Web服务中洗牌数据。我们刚刚引入了一个注释来帮助我们验证那些POJO中的字符串字段是否具有一定的长度。这使我们能够验证POJO,而不是等待数据库层在异常持续时抛出异常 我现在想对这些对象进行分析,告诉我哪些字段是没有这个新注释的字符串。我想这样做,这样我就可以得到一个没有这个注释的字段列表,这样就可以将它与对应的DB字段进行比较,并将注释添加到正确的长度作为其参数 不,我们无法在POJO和数据库对象之间获得更好的相关性 不,我们的数据库对象没有此验证可用

我有一些POJO,用于在我的应用程序及其Web服务中洗牌数据。我们刚刚引入了一个注释来帮助我们验证那些POJO中的字符串字段是否具有一定的长度。这使我们能够验证POJO,而不是等待数据库层在异常持续时抛出异常

我现在想对这些对象进行分析,告诉我哪些字段是没有这个新注释的字符串。我想这样做,这样我就可以得到一个没有这个注释的字段列表,这样就可以将它与对应的DB字段进行比较,并将注释添加到正确的长度作为其参数

不,我们无法在POJO和数据库对象之间获得更好的相关性

不,我们的数据库对象没有此验证可用。我们确实希望在POJO上进行此验证,因为在运行时验证和报告无效数据更简单

是否有一些静态分析工具可以帮助我完成这项任务?

当然可以

解析Java代码。沿着小路走。在类的AST中找到感兴趣的字段(可能还需要进行名称和类型解析(“符号表”),以便您可以将字段与任意其他字段区分开来),并检查AST中所需的注释


您可以使用任何JavaAST解析器(和名称解析器)来实现这一点。我认为Eclipse可以提供这一点。我们可以做到这一点。似乎有一个Java解析器,但我怀疑它是否有Java名称和类型解析。

我选择使用注释来满足运行时验证的需要,然后编写了一个单元测试来验证所有字段是否都有注释。这是受到了他的启发

因此注释是@Length,需要一个整数参数。在运行时,验证器遍历字段并查找@Length注释,并确保其应用于字符串字段。然后查看字符串值的长度,并确保其小于或等于注释的参数


在单元测试中,我按包加载POJO的所有类。然后我迭代这些类,迭代每个类字段,最后检查字段是否是字符串,是否分配了@Length注释。如果字段是字符串且没有@Length,则会将类和字段名添加到字符串列表中。测试的断言是此列表为空。

您不能使用反射获取字段及其类型吗?是的。我可以加载我所有的POJO,迭代每个类,迭代每个字段,查看类型并给出一个列表。