我正在考慮編寫一個程序來檢查Java中的「泄漏抽象」 。這突然出現在腦海馬上一個領域是例外:Java漏洞抽象檢查器
public class X
{
// this one is fine, Readers throw IOExceptions so it is
// reasonable for the caller to handle it
public void parse(final Reader r)
throws IOException
{
}
// This one is bad. Nothing in the API indicate that JDBC
// is being used at all.
public void process()
throws SQLException
{
}
}
注意,我不想上選中/ unchecked異常的相對優點的爭論。我正在尋找的是其他的例子(不一定是異常處理),人們也可以通過檢查源代碼或類文件合理地捕捉到這些例子。
我知道checkstyle,findbugs和PMD,而AFAIK沒有一個處理這個問題(我不反對把這些工具放到其中一個工具裏,而不是寫我自己的)。
是否有任何其他泄漏抽象的例子,你想到可以靜態檢查?
編輯:
之所以第二個是壞的是,該方法拋出,其中客戶端無法知道JDBC(例如,它可以是任何東西)的方式產生的異常正在使用。所以「泄漏抽象」是JDBC正在被使用。如果底層機制改變爲其他方式(比如說JPA是一個不同的數據庫抽象庫),那麼異常也都需要改變。所以底層的數據庫庫被泄漏出去了。
那麼,是要確定API沒有停留在正確的抽象層次上?這個問題可能是語義上的,因爲只能做出這樣的判斷(很多時候我們做錯了)。mmmhhh – OscarRyz 2009-02-24 03:11:34
是的,如果你想改變它,它會是主觀的。這個想法是指出清理代碼可能有意義的地方。 – TofuBeer 2009-02-24 03:23:28
對,很有意思。 – OscarRyz 2009-02-24 03:47:28