如何解决Java将连接存储在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();
}
将Connection添加到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();
}
}
}
有很多优点,其中之一是编译时类型检查,或者您最终可以在检索Object时进行类型转换,例如:
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泛型,另一个优点是您不必进行这种类型转换。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。