繁体   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