在Kotlin中从字符串到列表<mytype>的jOOQ转换器

时间:2019-05-02 06:42:45

标签: generics kotlin jooq

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

因此,jOOQ converterString转换为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>声明的MYFIELDList<? extends MyType>方法推断的createField()不兼容。

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

0 个答案:

没有答案