我一直在研究有關使用Java和數據庫的事情。我使用一個數據庫抽象層,並得到我的結果是這樣的:Java,通用啓用對象列表的隱式和顯式類型轉換
Hashtable h = connection.selectRow("select * from table where id = 5");
然而,在相同的格式返回的行數時,它返回:
ArrayList<Hashtable> a = connection.selectAll("select * from table where id > 5");
現在,因爲我喜歡仿製藥,我想用
ArrayList<Hashtable<String,String>> a = connection.selectAll("select * from table where id > 5");
充分利用它但這不會編譯:
Cannot convert from ArrayList<Hashtable> to ArrayList<Hashtable<String,String>>.
然而,分裂這個樣子,它的工作原理:
ArrayList<Hashtable> a = connection.selectAll("select * from table where id > 5");
Hashtable<String,String> h = a.get(0);
這隻能產生一種類型的安全警示:
Type safety: The expression of type Hashtable needs unchecked conversion to conform to Hashtable<String,String>.
看來,如果一個臺階上方會做同樣的,因爲這些這裏有兩行代碼,但是被合併爲一個Java拒絕執行轉換。我懷疑一些內部機制負責這種行爲,但尚未找到原因。
有人會照顧精心製作嗎?
編輯:只是爲了澄清。當在我的例子中,錯誤消息指出
Cannot convert from ArrayList<Hashtable> to ArrayList<Hashtable<String,String>>.
時,在下面的線,爪哇似乎非常有能力的,它只是告訴我,當我用它不能做同樣的事情
Hashtable<String,String> h = a.get(0);
在我看來, Java對我說謊。當然,我們不是故意的,我們喜歡對方。但是必須有一個原因。這就是我想要發現的。
請你告訴我哪次課程的'connection'對象是什麼? – Chris 2011-03-15 15:12:08
這是從我們的數據抽象層一類,它實現與敏感返回類型的全選(),selectRow()和selectColumn()方法(ArrayList的,哈希表和ArrayList,分別地)。 –
0xCAFEBABE
2011-03-15 15:19:49