Kotlin 中从 String 到 List<MyType> 的 jOOQ 转换器

Mar*_*tör 5 generics jooq kotlin

我正在处理一种罕见的情况,我发现将 JSON 存储在 RDBMS 字段中是可以接受的。JSON 文档是一个数组或键值对象。

因此,jOOQ转换器将. 我在 Kotlin 中做这件事,这就是乐趣的开始——泛型。StringList<MyType>

转换器

@Suppress("UNCHECKED_CAST")
class MyTypeListConverter :
    AbstractConverter<String, List<MyType>>(String::class.java, List::class.java as Class<List<MyType>>) {...}
Run Code Online (Sandbox Code Playgroud)

发电机配置

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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

生成的jOOQ代码

public final TableField<EventRecord, List<MyType>> MYFIELD = 
createField("TITLE", org.jooq.impl.SQLDataType.CLOB.nullable(false), this, "", new MyTypeListConverter());
Run Code Online (Sandbox Code Playgroud)

问题

由于类型不兼容,生成的 jOOQ 代码无法编译。List<MyType>as 声明的与从方法推断的MYFIELD不兼容。List<? extends MyType>createField()

最终,这可能更多的是关于 Java-Kotlin 泛型互操作性,而不是 jOOQ。? extends MyType错误消息中的不变量是可疑的。