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