[英]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.