将java.sql.Connection类型转换为OracleConnection与从java.sql.Cnnection解包方法获得OracleConnection有何不同。
此外,如果我通过connection.unwrap(OracleConnection.class)创建OracleConnection,那么我应该最终关闭中的OracleConnection还是最终关闭中java.sql.connection。
这种差异有些微妙,但很有意义。
如果实际实现对象与声明的类不兼容,则ClassCastException
的类型转换将失败。也就是说,如果实现不是OracleConnection
,并且您尝试对其进行类型转换,则会得到异常。
使用unwrap(Class clazz)
将尝试查找指定类型的对象并返回该对象,如果不可能,则使用SQLException
失败。使用Wrapper
接口方法的好处是,您可以使用isWrapperFor
方法提前检查unwrap
是否会成功。