java - JOOQ 字段类仅限于记录(无类型)
问题描述
我正在尝试创建一个通用的类型安全方法来按主键从行中获取一些字段,如下所示:
/**
* Abstract Generic DAO Layer for BaseEntity
*
* RB - Record Bean
* EB - Entity Bean
* PK - Primary key type
*/
public interface AbstractDao<RB extends TableRecord, EB extends BaseEntity, PK> {
/**
* Fetches specified fields by given primary key
*/
Optional<EB> findById(PK id, TableField<RB, ?>... fields);
}
虽然它工作正常,但问题是我无法在此处提供字段类型作为第二个通用参数:
TableField<RB, ?>... fields
由于已知它仅对自身进行字段处理,因此可能导致堆污染问题。
我很乐意将我的签名更改为:
Optional<EB> findById(PK id, Field<RB>... fields);
但Field
只接受它的类型作为泛型参数,而不是记录类型。
在 JOOQ 代码库中是否有任何绑定到其 Record 类型的 Field 类的子/父?
谢谢。
解决方案
在 JOOQ 代码库中是否有任何绑定到其 Record 类型的 Field 类的子/父?
TableField<R extends Record, T>
是您要查找的类型。任何其他可以提供参考的类型都将<R>
与您遇到的问题完全相同,并且它不会提供任何语义优势TableField
无论如何,只需抑制警告:
@SuppressWarnings("unchecked")
Optional<EB> findById(PK id, TableField<RB, ?>... fields);
毕竟,使用可变参数时的这些堆污染警告真的很烦人,而且更多的是语言的缺陷,而不是你的 API。
推荐阅读
- c++ - 使用 reinterpret_cast 访问类似“struct {double, int}”的对象的对象
- android - React Native Android 崩溃 - RNKeychainManager.setInternetCredentialsForServer 有 6 个参数,预期为 7
- react-redux - 已启用 Google maps api 地理编码,地点和 javascript 未显示错误,地理编码请求已通过 REQUEST_DENIED 满足
- python - 如何绘制 ohlc 图表?
- amazon-web-services - “JavaServer Faces 2.2 需要动态 Web 模块 2.5 或更高版本。”
- git - AWS Codebuild - 可以从 codebuild buildspec 访问最后一个 git commit 消息吗?
- oop - 哪个设计更好?把这个逻辑放在前端还是后端?
- docker - 如何泊坞窗运行指向同一端口的 API 项目同时具有两个 GitHub 分支
- reactjs - 使用 TinyMCE-react
- java - 如何将 xhtml 表单中的数据插入 netbeans 中的 Java DB?