[英]In ORMLite why should we use DAOs with an ID of a specific type when Object seems to work?
例如,我可以使用Dao<InvoiceItem, Object>
或Dao<InvoiceItem, UUID>
擴展 BaseDaoImpl。 當 Object 似乎也能正常工作時,為什么我要指定 UUID?
到目前為止,我在一個大型項目中的所有 Dao 實現中使用 Object 一直有效。 我想我可能在啟用它后破壞了對象緩存功能的情況下絆倒了,但是我對 ORMLite 的 ReferenceObjectCache.java 中用於存儲和檢索 Map 引用的模式的測試表明,它適用於強類型鍵或鍵轉換為對象。
我仍然沒有弄清楚為什么啟用它后對象緩存功能對我不起作用(相同的數據,不同的對象),但試圖弄清楚這一點讓我想知道為什么甚至有理由在一個中指定 ID 類型從 ORMLite DAO 開始。
例如,我可以使用
Dao<InvoiceItem, Object>
或Dao<InvoiceItem, UUID>
擴展BaseDaoImpl
。 當Object
似乎也能正常工作時,為什么我要指定UUID
?
Dao
是一個泛型類。 當您談論List<UUID>
與List<Object>
相比時,您的問題會很相似。 泛型類型意味着當您調用dao.deleteById(uuid)
時,它將提供類型檢查以驗證 id 是否是正確的類。 如果您使用的是Object
id,您可能會不恰當地調用dao.deleteById("hello")
如果 ID 字段是UUID
則找不到您的對象。
此外,如果您調用UUID id = dao.extractId(data)
,則不必轉換結果,因為編譯器知道該方法返回UUID
。
到目前為止,我在一個大型項目中的所有 Dao 實現中使用 Object 一直有效。
泛型類型實際上僅適用於調用者,並提供編譯器時類型檢查。 BaseDaoImpl
中的ID
類型實際上只是一個對象。
這是 Oracle 提供的關於 我們為什么使用泛型的教程,可能有助於您理解。 他們的首要原因是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.