【发布时间】:2009-02-15 13:39:12
【问题描述】:
我在学习 JDBC 时遇到了几个接口 - 连接、语句、结果集等...
这是否意味着某些对我隐藏的类正在实现这些接口,并在我需要时提供它们的引用?这是因为它们需要根据我使用的驱动程序以不同的方式实现吗?
【问题讨论】:
我在学习 JDBC 时遇到了几个接口 - 连接、语句、结果集等...
这是否意味着某些对我隐藏的类正在实现这些接口,并在我需要时提供它们的引用?这是因为它们需要根据我使用的驱动程序以不同的方式实现吗?
【问题讨论】:
是的,你是对的。这些接口的实现可以在数据库 JDBC 驱动中找到。
【讨论】:
在 JDBC 驱动程序的特定情况下,您是正确的。各个驱动程序 jar 包含必要接口的实现。
在其他情况下,例如 Calendar 的一个著名示例,您可以查看文档以了解 已知 子接口和直接实现。当然,Sun 的文档只会列出核心 Java 库中存在的子接口和子类。您可以在 3rd 方库(例如 Apache Commons)或您自己的代码中找到许多其他实现。
【讨论】:
这是因为它们需要根据我使用的驱动程序以不同的方式实现吗?
例如。出于多种原因,将代码编写到接口而不是实现(= 类,在这种情况下)是一般的最佳实践。您已经提到了其中之一:相关但不同的实现可以共享一个通用接口。另一点是,可以在后台更改一个特定的实现,而无需更改接口:假设驱动程序的下一个实现需要使用另一个类。实现现有接口就够了。
现在想象一下,代码处理类类型而不是接口。现在,如果实现改变了,这些接口也需要改变。这意味着 API 的每个用户(包括您)也必须更改他们的代码!
【讨论】:
正如 Johannes 所说,实际的 DB 驱动程序实现了这些类。关键是您可以切换驱动程序而无需对代码进行任何实际更改。
【讨论】: