确定有效的getter和setter

时间:2014-01-07 09:42:53

标签: java setter getter

我需要扫描java(POJO)文件的目录,浏览它们中的每一个,找出这些POJO中定义的相应变量,并检查它是否具有正确的getter和setter名称。例如: - 如果empName是变量名称,那么它应该具有getEmpName()而不是getempName()的getter。

这是因为我们长时间构建的J2EE应用程序由于使用了无效的getter和setter而开始失败,这是前端技术无法识别的。

我做了一个可以确定的基本程序。我的确切问题就像在什么基础上我可以识别一行中的变量。在我的逻辑中,我写了假设包含private关键字的行中的第三个单词将是变量名。只是想知道这种方法是否正确,还是我需要尝试不同的东西,因为看起来要求非常通用。

3 个答案:

答案 0 :(得分:3)

尝试自己扫描源文件会很痛苦并且涉及很多边缘情况等。

例如,变量的限定符可以是任何顺序,可以有多个。数组括号可以在变量名之前或之后,变量可能会或可能不会被初始化等等。有些可能被注释掉或者在内部类中。

您最好的方法是使用反射并使用它来扫描对象。

反射是允许运行Java代码以了解自身的原因。您可以编写一个小程序并添加代码以作为该程序的库进行扫描。然后程序可以扫描这些Jars中的类,并且每个使用反射来查询其中的方法和变量列表。

http://docs.oracle.com/javase/tutorial/reflect/

答案 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启动。