簡體   English   中英

在 ORMLite 中,當 Object 似乎可以工作時,為什么我們應該使用具有特定類型 ID 的 DAO?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM