[英]Java Store a Connection in a HashMap
我希望構建一個通用的 HashMap 來存儲一些東西,其中之一是連接對象。 這是一個簡化的例子:
初始化函數
public Map<Object, Object> genObjectInit() {
Map<Object, Object> genObject = new HashMap<Object, Object>();
}
添加連接對象(作為示例)
public Map<Object, Object> genObjectConnect(Map<Object, Object> genObject) throws Exception {
Connection PgSQL;
try {
Class.forName("org.postgresql.Driver");
PgSQL = DriverManager.getConnection ( /* yes */ );
} catch(Exception log) {
throw new Exception("failed to connect");
}
genObject.put("PgSQL", PgSQL);
return genObject;
}
測試它是否有效
public void genObjectTest(Map<Object, Object> genObject) {
genObject.put("Yes", "Yes");
System.out.println(genObject.get("PgSQL").getClass().getName());
genObject.get("PgSQL").close();
}
將連接添加到 HashMap 似乎有效, genObject.get("PgSQL").getClass().getName()
的輸出給了我org.postgresql.jdbc.PgConnection
我認為這意味着它仍然是一個 Connection 對象但是調用genObject.get("PgSQL").close();
與
/yes/yes/yes.java:45: error: cannot find symbol
genObject.get("PgSQL").close();
^
我在這里顯然誤解了一些東西。 如何使用通用存儲的 Connection(或等效但同樣獨特的對象)的功能?
使用Map<Object, Object>
可讓您訪問 Object 類中聲明的方法,因為當您從地圖中檢索對象時
public void genObjectTest(Map<Object, Object> genObject) {
genObject.put("Yes", "Yes");
System.out.println(genObject.get("PgSQL").getClass().getName());
genObject.get("PgSQL").close();
}
然后genObject.get("PgSQL")
的結果存儲在 Object 類的實例中。
根據您的用例,您可以嘗試使用具有特定類型的 Java 泛型並將您的 Map 聲明為Map<Object, Connection>
如下所示:
public void genObjectTest(Map<Object, Connection> genObject) {
genObject.put("Yes", connectionInstance);
System.out.println(genObject.get("PgSQL").getClass().getName());
Connection pgSQL = genObject.get("PgSQL");
try {
pgSQL.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
這為您提供了許多優勢,其中之一是編譯時類型檢查,或者您最終可以在檢索對象時進行類型轉換,例如:
public void genObjectTest(Map<Object, Object> genObject) {
genObject.put("Yes", "Yes");
System.out.println(genObject.get("PgSQL").getClass().getName());
Object connectionAsObject = genObject.get("PgSQL");
if (connectionAsObject instanceof Connection) {
Connection pgSQL = (Connection) connectionAsObject;
try {
pgSQL.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
然而,這是不太受歡迎的解決方案。 使用第一個解決方案,即具有特定類型的 java 泛型,另一個優點是您不必進行這種類型轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.