私は、Java で「漏れやすい抽象化」をチェックするプログラムを作成するという考えを熟考しています。すぐに頭に浮かんだ 1 つの領域は、例外があります。
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
{
}
}
注意してください、私はチェックされた/チェックされていない例外の相対的なメリットについて議論したくありません. 私が探しているのは、他の例 (例外処理である必要はありません) であり、ソース コードまたはクラス ファイルを調べることで合理的に把握できるものです。
私はcheckstyle、findbugs、およびPMDを認識していますが、知る限り、これを扱っているものはありません(そして、自分で作成するのではなく、これらのツールのいずれかにチェックを入れることに反対していません)。
静的にチェックできる漏れやすい抽象化の他の例はありますか?
編集:
2 番目の方法が悪い理由は、クライアントが JDBC (たとえば、何でもかまいません) が使用されていることを知る方法がない場合に、メソッドが例外をスローすることです。したがって、「漏れやすい抽象化」は、JDBC が使用されていることです。基礎となるメカニズムが別のものに変更された場合 (別のデータベース抽象化ライブラリである JPA など)、例外もすべて変更する必要があります。そのため、基盤となるデータベース ライブラリが流出しています。