generics - 从字符串到列表的 jOOQ 转换器在科特林
问题描述
我正在处理一种罕见的情况,我发现将 JSON 存储在 RDBMS 字段中是可以接受的。JSON 文档是一个数组或键值对象。
因此,jOOQ 转换器从 转换String
为List<MyType>
. 我在 Kotlin 中这样做,这就是乐趣的开始——使用泛型。
转换器
@Suppress("UNCHECKED_CAST")
class MyTypeListConverter :
AbstractConverter<String, List<MyType>>(String::class.java, List::class.java as Class<List<MyType>>) {...}
发电机配置
database {
inputSchema = "PUBLIC"
includes = ".*"
recordVersionFields = "(version|VERSION)"
customTypes {
customType {
name = "MyTypeListConverter"
type = "java.util.List<mypackage.MyType>"
converter = "mypackage.MyTypeListConverter"
}
}
forcedTypes {
forcedType {
name = "MyTypeListConverter"
expression = ".*Event\\.MYFIELD"
types = ".*"
converter = "mypackage.MyTypeListConverter"
}
}
}
生成的 jOOQ 代码
public final TableField<EventRecord, List<MyType>> MYFIELD =
createField("TITLE", org.jooq.impl.SQLDataType.CLOB.nullable(false), this, "", new MyTypeListConverter());
问题
由于类型不兼容,生成的 jOOQ 代码无法编译。List<MyType>
as 声明的与从方法推断的MYFIELD
不兼容。List<? extends MyType>
createField()
最终,这可能更多是关于 Java-Kotlin 泛型互操作性,而不是关于 jOOQ。错误消息中的? extends MyType
不变量是可疑的。
解决方案
推荐阅读
- bash - 循环遍历目录中的前 12 个文件,如果找到文件则中断
- html - CSS :hover text-decoration: 下划线在 Safari 上不起作用
- python - 与列表元素部分匹配的文件名
- reactjs - OnChange 中缺少 React State 字段
- flutter - 参数类型“用户?函数(用户)”不能分配给参数类型“用户?函数(用户?)”
- date - Google App Script - 如何在 AdminReports.UserUsageReport.get() 中使用时区设置日期
- python - KivyMD RecycleView 网格中的复选框操作重复
- git - 执行 git push 时,Git bash 卡住了
- excel - 是否可以使用 VBA 宏始终检查您刚刚编辑的每个单元格,然后将其着色为某种颜色(如果是硬编码或公式)?
- excel - 事件 Worksheet_BeforeDoubleClick 提供先前双击的值