Кто / Что реализует интерфейсы, которые я могу использовать напрямую? - PullRequest
2 голосов
/ 15 февраля 2009

Во время изучения JDBC я сталкивался с несколькими интерфейсами - Connection, Statement, ResultSet и т. Д ...

Означает ли это, что некоторые классы где-то, скрытые от меня, реализуют эти интерфейсы и предоставляют свои ссылки, когда мне это нужно? Это потому, что они должны быть реализованы по-разному в зависимости от используемого драйвера?

Ответы [ 4 ]

2 голосов
/ 15 февраля 2009

Да, вы правы. Реализация этих интерфейсов может быть найдена в базе данных драйверов JDBC.

1 голос
/ 15 февраля 2009

В конкретном случае драйверов JDBC вы правы. В отдельных банках драйверов содержатся необходимые интерфейсы.

В других случаях, таких как Календарь для одного известного примера, вы можете проверить документацию для известных подинтерфейсов и прямых реализаций. Конечно, в документации Sun будут перечислены только те подинтерфейсы и подклассы, которые существуют в основных библиотеках Java. Вы можете найти множество других реализаций в сторонних библиотеках, таких как Apache Commons или в вашем собственном коде.

0 голосов
/ 15 февраля 2009

Как говорит Йоханнес, настоящие драйверы БД реализуют эти классы. Дело в том, что вы можете переключать драйверы, не внося никаких изменений в код.

0 голосов
/ 15 февраля 2009

Это потому, что они должны быть реализованы по-разному в зависимости от используемого драйвера?

Например. Обычно рекомендуется кодировать интерфейс вместо реализации (в данном контексте = класс) по нескольким причинам. Один из них был упомянут вами: связанные, но разные реализации могут иметь общий интерфейс. Другой момент заключается в том, что одна конкретная реализация может быть изменена негласно, не требуя также изменения интерфейса: скажем, в следующей реализации драйвера должен использоваться другой класс. Для этого достаточно реализовать существующий интерфейс.

Теперь представьте, что вместо интерфейсов код работал с типами классов. Теперь, если реализация изменилась, эти интерфейсы также должны быть изменены. Это будет означать, что каждый пользователь (включая вас) API должен был также изменить свой код!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...