Я бы сказал, что возвращение пустой строки, очевидно, является неправильной реализацией интерфейса, поскольку имя таблицы никогда не может считаться пустой строкой.
Проблема, с которой, по-моему, они борются, заключается в том, что, хотя их текущая реализация неверна, как только они выберут реализацию, они застрянут с ней, пока не решат, что нарушение зависимости от поведения приемлемо. Поэтому они решили добавить метод, имя которого однозначно, и предоставить данные, от которых большинство пользователей ожидали получить getTableName
, и оставить явно нарушенную реализацию метода getTableName
, пока не будет достигнут консенсус относительно того, что он должен возвращать. или пока не будет представлен патч, реализующий консенсус.
Моя внутренняя реакция заключается в том, что метод getTableName
должен возвращать псевдоним, используемый для этой таблицы. Таблица может быть объединена с самим собой, и использование псевдонима позволит вам определить, на какую ссылку ссылались. Таблица могла быть сгенерирована в запросе (например, удалить массив) и поэтому даже не иметь имени таблицы в базе данных. Если вы принимаете решение «абсолютно всегда, getTableName
возвращает псевдоним», то, по крайней мере, пользователи знают, чего ожидать; в противном случае вы не поймете, что должен возвращать метод.
Однако, даже если я предполагаю, что моя внутренняя реакция - «правильная реализация», это поднимает вопрос совместимости. Желательно, чтобы можно было переключаться с другой СУБД на PostgreSQL с минимальными затратами, если одна из целей PostgreSQL - это рост популярности. Поэтому такие вещи, как «как другие JDBC реализуют интерфейсы java.sql?», Становятся актуальными. Как вы говорите, существует фреймворк, в котором есть ожидания того, как должен быть реализован ResultSetMetaData
, и, вероятно, он не единственный с определенными ожиданиями того, как будут реализованы интерфейсы java.sql
.
Какую бы реализацию они в итоге ни выбрали, это будет компромиссом, поэтому я понимаю, почему «выбить из строя» - это их выбор. Как только они выбирают компромисс, который хотят сделать, они блокируются.
РЕДАКТИРОВАТЬ: Я хотел бы предложить, что бросить исключение в отношении не реализованных было бы лучше, чем просто молча провал. Я ожидаю, что фреймворки, которые полагаются на конкретную реализацию getTableName
, в любом случае не будут иметь большого значения для пустой строки, и либо ошибки, либо сами по себе завершатся сбоем.