Я обдумываю идею написания программы для проверки
"дырявые абстракции" в 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
{
}
}
Обратите внимание, я не хочу аргумент относительно относительных достоинств проверенных / непроверенных исключений. То, что я ищу, - это другие примеры (не обязательно для обработки исключений), которые есть у людей, которые также могут быть разумно обнаружены путем изучения исходного кода или файлов классов.
Мне известны чекстайл, findbugs и PMD, и AFAIK ни один из них не занимается этим (и я не против вставлять чеки в один из этих инструментов, а не писать свои).
Есть ли еще примеры утечек абстракций, о которых вы можете подумать, которые можно статически проверить?
EDIT:
Причина, по которой второй является плохим, заключается в том, что метод генерирует исключение, когда клиент не может знать, что используется JDBC (например, это может быть что угодно). Таким образом, «дырявая абстракция» заключается в том, что используется JDBC. Если базовый механизм изменился на что-то другое (скажем, JPA, который является другой библиотекой абстракции базы данных), то исключения также должны будут измениться. Таким образом, базовая библиотека базы данных просочилась.