jdbc为什么不';t javax.sql.PooledConnection继承自java.sql.Connection

jdbc为什么不';t javax.sql.PooledConnection继承自java.sql.Connection,java,jdbc,Java,Jdbc,每次实现PooledConnection时,我们都会编写 class MyConnection implements PooledConnection, Connection { // implement methods of PooledConnection and Connection } 我想知道为什么PooledConnection没有设计成extensedconnection?由于PooledConnection始终是连接 我一点也不确定,但我想PooledConnection

每次实现PooledConnection时,我们都会编写

class MyConnection implements PooledConnection, Connection {
  // implement methods of PooledConnection and Connection 
}

我想知道为什么
PooledConnection
没有设计成
extensedconnection
?由于
PooledConnection
始终是
连接

我一点也不确定,但我想
PooledConnection
没有扩展
Connection
的原因是,您可以使用任何其他现有的
连接实现,使
PooledConnection
实现简单得多,从而允许代码重用并保持功能分离

。。。因为PooledConnection始终是一个连接

事实上,这就是重点。
PooledConnection
接口设计允许
PooledConnection
实例成为与
Connection
实例不同的对象

你为什么要那样做?在XA实现中,可能有许多来自不同数据库供应商的
Connection
的不同实现,而
PooledConnection
类被设计用来处理除此之外的“东西”;e、 g.跨多个数据库协调事务。保持两个接口的不同意味着XA实现不需要将XA级别的连接实现为包装对象

当然,由于
PooledConnection
Connection
接口,它们可以由相同的连接类实现。。。如果情况需要的话


(或者至少,这是我的理论。要得到明确的答案,你需要询问产生这些接口的规范的编写者。)

PooledConnection
是物理连接的句柄。这个物理连接对象可能是一个JDBC
连接
,但另一方面,它也可能是一个较低级别的特定于数据库的构造

句柄是连接池用来创建逻辑
connection
-对象以分发给连接池的客户端(使用
getConnection()
方法)的对象。当客户端关闭该连接时,连接池会被通知
PooledConnection
再次可用


PooledConnection
不打算直接用作
连接,因此它不扩展连接接口。

经验表明,功能应该指定为接口,而不是通过扩展类。只需查看
属性
作为一个很好的例子来说明为什么不可以(属性不是哈希映射)我不确定这是怎么回事;
Connection
PooledConnection
都不是类。假设我们有一个名为
ConnectionImpl
Connection的实现,我们仍然可以写:
class MyConnection扩展了ConnectionImpl实现了PooledConnection
,对吗?你可以。但我相信如果让
MyConnection
只实现
PooledConnection
,然后在
getConnection()中返回
ConnectionImpl
的实例,则不需要这样做
method。因为如果您选择,您可以为许多不同的连接对象类型编写单个PooledConnection类。它允许您将现有连接写入到PooledConnection对象中。如果不是这样,则编写外部库来执行池将是一件痛苦的事,因为您必须重写每个连接类型连接方法包装一个实例并委托给另一个实例。噢,提到PooledConnection.getConnection方法很有意义。PooledConnection的javadoc提供了有用的信息。