我需要扫描java(POJO)文件的目录,浏览它们中的每一个,找出这些POJO中定义的相应变量,并检查它是否具有正确的getter和setter名称。例如: - 如果empName
是变量名称,那么它应该具有getEmpName()
而不是getempName()
的getter。
这是因为我们长时间构建的J2EE应用程序由于使用了无效的getter和setter而开始失败,这是前端技术无法识别的。
我做了一个可以确定的基本程序。我的确切问题就像在什么基础上我可以识别一行中的变量。在我的逻辑中,我写了假设包含private
关键字的行中的第三个单词将是变量名。只是想知道这种方法是否正确,还是我需要尝试不同的东西,因为看起来要求非常通用。
答案 0 :(得分:3)
尝试自己扫描源文件会很痛苦并且涉及很多边缘情况等。
例如,变量的限定符可以是任何顺序,可以有多个。数组括号可以在变量名之前或之后,变量可能会或可能不会被初始化等等。有些可能被注释掉或者在内部类中。
您最好的方法是使用反射并使用它来扫描对象。
反射是允许运行Java代码以了解自身的原因。您可以编写一个小程序并添加代码以作为该程序的库进行扫描。然后程序可以扫描这些Jars中的类,并且每个使用反射来查询其中的方法和变量列表。
答案 1 :(得分:1)
您忘记了变量可以有更多的限定符而不仅仅是可见性限定符:
private transient volatile int someVariable;
是有效的语法。它是一个私有变量,它不是序列化的,而是在线程之间共享。
也可能没有可见性限定符,这会产生一个包私有变量(可以由同一个包中的类访问,但不能从其他包中的类访问)。
int otherVariable;
您可以依赖的是变量名称本身后跟0-n空格和=
或;
。除非是数组,否则使用简单的getter和setter公开数组通常不是一个好主意。
方法名称后面跟着0-n个空格和(
。
答案 2 :(得分:1)
大多数IDE(Eclipse,Netbeans和IntelliJ IDEA)都有高质量工具插件(Checkstyle,PMD和FindBug)。
您可以使用SONAR,FISHEYE等外部工具。
请检查此link以获取PMD启动。