2014-01-07 39 views
3

我有一個要求來掃描java(POJO)文件的目錄,遍歷它們中的每一個,並找出在這些POJO中定義的相應變量,並檢查它是否具有正確getter和setter名字。例如: - 如果empName是變量名稱,那麼它應該具有getEmpName()而不是getempName()確定有效的獲取者和設置者

這是因爲我們長時間構建的J2EE應用程序由於使用無效的getter和setter而失敗,這是前端技術無法識別的。

我已經完成了一個可以確定這個基本程序。我確切的問題就像我能在什麼基礎上識別一行中的變量。在我的邏輯中,我已經寫了假設包含private關鍵字的行中的第三個字將是變量名。只是想知道這種方法是對的還是我需要嘗試一些不同的東西,因爲它似乎是非常通用的要求。

+0

不要通過將文檔作爲源文件進行掃描。使用反射。 –

+0

我不確定,但apache-commons-beanutils可能有這樣的 –

+0

使用checkstyle之類的代碼分析工具可能會更容易。 – Qwerky

回答

1

你忘記了,變量可以有更多的預選賽不僅僅是知名度預選賽:

private transient volatile int someVariable; 

是有效的語法。它是一個私有變量,它不被序列化,並在線程之間共享。

也可能沒有可見性限定符,這會導致包私有變量(可以由同一個包中的類訪問,但不能從其他包中的類訪問)。

int otherVariable; 

什麼可以依靠的是變量名本身總是跟着0-N空格和=;。除非它是一個數組,否則用簡單的getter和setter來暴露數組通常不是一個好主意。

方法名後面總是跟着0-n個空格和一個(

+0

感謝兄弟,我有一個非常類似的方法,你有什麼建議gere,仍然需要進一步,過濾一些更多不想要的字符,現在,當測試我遇到了POJO中的方法定義,這些東西需要被檢測我猜測 – hkarthik86

+0

更好地使用QA工具。 –

+0

@SureshkumarPanneerselvan你能寫一個答案,解釋哪些QA工具可以用於這個以及如何使用它們? – Philipp

3

試圖掃描源文件自己會是痛苦的,涉及到很多的邊緣情況等

例如在變量預選賽可以按任意順序排列,也可以是多個的。數組括號可以在變量名之前或之後,變量可以被初始化或不被初始化等等。一些可以被註釋掉或者在內部類中。

你最好的方法是使用反射和掃描對象。

反射是允許運行Java代碼來了解它自己。您可以編寫一個小程序並添加代碼作爲該程序的庫進行掃描。程序然後可以掃描那些Jars中的類,並且每個程序都使用反射來查詢其中的方法和變量列表。

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

+0

正是你說的,這是我的頭大。我還聽說過反射技術,有沒有人可以提出一些好看的東西? – hkarthik86

+0

我已經添加了一些關於反射的信息。 –

1

大多數的IDE(Eclipse中,NetBeans和IntelliJ IDEA的)都具有質量工具​​(的Checkstyle,PMD和FindBug)插件。

像SONAR,FISHEYE這樣的外部工具也可以使用。

請檢查此link PMD啓動。