Java 识别有效的getter和setter

Java 识别有效的getter和setter,java,setter,getter,Java,Setter,Getter,我需要扫描一个java(POJO)文件目录,检查其中的每个文件,找出这些POJO中定义的相应变量,并检查它是否具有正确的getter和setter名称。例如:-如果empName是变量名,那么它的getter应该是getEmpName(),而不是getEmpName() 这是因为我们的J2EE应用程序是在很长时间后构建的,由于使用了无效的getter和setter而开始失败,这在前端技术中是不可识别的 我已经做了一个基本的程序,在其中可以确定这一点。我的确切问题是,在什么基础上可以识别一行中的变

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

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


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

您忘记了变量可以有比可见性限定符更多的限定符:

private transient volatile int someVariable;
是有效的语法。它是一个私有变量,未序列化,在线程之间共享

也可能没有可见性限定符,这会导致包私有变量(可以由同一包中的类访问,但不能从其他包中的类访问)

您可以依赖的是,变量名本身后面总是有0-n个空格和一个
=
或一个
。除非它是一个数组,但是使用简单的getter和setter公开数组通常不是一个好主意


方法名称后面总是跟有0-n个空格和

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

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

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

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

大多数IDE(Eclipse、Netbeans和IntelliJ IDEA)都有用于高质量工具(Checkstyle、PMD和FindBug)的插件

外部工具,如声纳,鱼眼也可以使用


请检查此PMD启动。

不要将源代码扫描为文本。请使用反射。我不确定,但apache commons beanutils可能有类似的功能。使用checkstyle之类的代码分析工具来执行此操作可能更容易。谢谢各位,让我尝试一下上述建议,同时@Qwerky,是否可以使用t规则喜欢通过checkstyle或sonar来识别获得者?是的,无论是标准的JEE还是定制的JEE。正如你所说,这就是我现在拥有的大头顶。我还没有听说过反射技术,有人能推荐一些好的方法来研究它吗?我为你添加了一些关于反射的信息。谢谢老兄,我有一个与你非常相似的方法我建议gere,仍然需要更多,以过滤更多不需要的字符,现在在测试时,我在POJO中遇到了一个方法定义,我需要找到这些东西guess@SureshkumarPanneerselvan菲利普补充道:“你能写一个答案,解释哪些QA工具可以用于此目的,以及如何使用它们吗?”。
int otherVariable;