簡體   English   中英

如何在 Java 中使接口更具體?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM