我正在研究一种罕见的情况,即发现可以在RDBMS字段中存储JSON。 JSON文档是一个数组或键值对象。
因此,jOOQ converter从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>
声明的MYFIELD
与List<? extends MyType>
方法推断的createField()
不兼容。
最终,与jOOQ相比,这可能更多是关于Java-Kotlin泛型互操作性的。错误消息中的? extends MyType
不变量是可疑的。