2013-03-08 82 views
9

作爲我的程序的常規靜態分析的一部分,我想檢查類可能有健全的toString()方法。可能不是每個類都實現它們,但也許沒有實例化的具體類使用ObjecttoString()的實現。驗證Java類實現toString()

是否有一個檢查此問題的lint工具包?我目前使用的是FindBugs和CheckStyle;我還沒有找到明顯的方法來檢查使用這些。我也在尋找將PMD添加到我的lint套件中,並且也會在Sonar中開放的東西。所以我寧願使用已經在我的工具箱中的工具來完成它,但如果我需要添加另一個工具,我會考慮它。

+1

我會使用CheckStyle並創建一個自定義規則。聽起來這是一條很好的規則 - 你應該把它貢獻給開源代碼庫。 – Bohemian 2013-03-08 23:07:45

+3

啊,更多規則!它就像一個脫衣舞俱樂部。 – irreputable 2013-03-08 23:12:21

回答

4

您可以使用Checkstyle的Regexp檢查做到這一點:

<module name="Regexp"> 
    <property name="format" value="public\s+String\s+toString\s*()"/> 
    <property name="message" value="All classes must implement toString()"/> 
    <property name="ignoreComments" value="true"/> 
</module> 

這甚至承認註釋掉toString()方法是不存在的。我嘗試過使用Checkstyle 5.6和eclipse-cs,但它也應該可以在早期版本中使用。

+0

這很接近,謝謝。它不包括類繼承完全可用的'toString()'(例如來自'AbstractList')的情況,但它可能是我需要的。 – 2013-03-13 15:26:55