我正在考虑编写一个程序来检查 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
{
}
}
请注意,我不希望对已检查/未检查异常的相对优点进行争论。我正在寻找的是人们拥有的其他示例(不一定是异常处理),这些示例也可以通过检查源代码或类文件来合理地捕获。
我知道 checkstyle、findbugs 和 PMD,而 AFAIK 都没有处理这个问题(我不反对将检查放入其中一个工具中,而不是自己编写)。
您是否想到了其他可以静态检查的泄漏抽象示例?
编辑:
第二个不好的原因是该方法抛出了一个异常,客户端无法知道正在使用 JDBC(例如,它可能是任何东西)。因此,“泄漏抽象”是正在使用 JDBC。如果底层机制更改为其他东西(例如 JPA,它是一个不同的数据库抽象库),那么异常也都需要更改。所以底层数据库库被泄露了。