[英]How to make an interface more specific in Java?
我有一个使用两个不同 sql 数据库的大型系统。 我有很多地方两个数据库都包含在一个方法中。 例如:
public static void doSomething(Connection mySqlConn, Connection dbConn) {...}
是否有一种简单(优雅)的方法可以使签名更具体。 例如:
public static void doSomething(MySqlConnection mySqlConn, DatabricksSqlConnection dbConn {...}
我尝试扩展 Connection 接口,然后将连接强制转换为该接口,但这给出了无法强制转换的异常(不允许扩大接口)。
更具体的界面
import java.sql.Connection;
public interface MySqlConnection extends Connection {
}
这会引发异常
public static MySqlConnection getMysqlConnection(String schema, String url, String uid, String pwd) {
try {
Connection conn = DriverManager.getConnection(url, uid, pwd);
return (MySqlConnection) conn;
} catch (Exception exp) {
throw new RuntimeException(exp);
}
}
这不是问题的直接答案,但可能会以不同的方式解决您的问题:
您可以创建一个 class 将两个Connection
都保存为命名成员,然后您可以传递此 class 的对象,而不是分别传递两个连接。
您在此用例中滥用了 DriverManager 的概念。
DriverManager 可帮助您在处理 JDBC 对象时不引入任何供应商特定的 API。
您的 MySql JDBC 驱动程序已经包含捆绑的 MySQL 的专用实现(手动实例化)。 There is already a com.mysql.jdbc.Connection
Interface (which you could cast) and a com.mysql.jdbc.ConnectionImpl
you could try to instantiate by yourself.
但这根本不被认为是好的做法。
最有可能为您提供不同数据库连接的工厂或持有人 object 可以帮助您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.