我试图将Jooq3.15新的Multiset运算符的工作示例转换为Kotlin,但我遇到了一些类型推断问题,无法编译。
到目前为止是这样的:
Sakila
架构kotlinx.coroutines.jdk-8
Async()
扩展方法将Java的
completionstage
future修改为Kotlin co-例程
data class Actor(val firstName: String?, val lastName: String?)
data class Film(val title: String?, val actors: List<Actor>, val
categories: List<String>)
...
val future = dsl.select(
FILM.TITLE,
multiset(
select(
FILM_ACTOR.actor().FIRST_NAME,
FILM_ACTOR.actor().LAST_NAME
)
.from(FILM_ACTOR)
.where(FILM_ACTOR.FILM_ID.eq(FILM.FILM_ID))
).`as`("actors").convertFrom { it.map( mapping(::Actor) ) }, // <--[1]
multiset(
select(FILM_CATEGORY.category().NAME)
.from(FILM_CATEGORY)
.where(FILM_CATEGORY.FILM_ID.eq(FILM.FILM_ID))
).`as`("films").convertFrom { it.map { r -> r.getValue(0) } }
)
.from(FILM)
.orderBy(FILM.TITLE)
.fetchAsync()
val result = future.await().map( mapping(::Film) ) // <--[2]
我遇到的问题在代码的[1]和[2]中有说明。
Type mismatch.
Required: ((String?, String?) → Actor!)!
Found: KFunction2<String, String, Actor>
目前我还不清楚为什么每个情况下的问题都不同。
我能得到一些指导吗?映射(/*constructor reference*/):RecordManager
是否可以在Jooq3.15.1中与Kotlin一起使用?如果没有,我可以合理地做些什么来解决这个问题?
关于问题[1],有时不能将属性设置为nullable:这样整个应用程序就会被这个nullable属性所污染。尽管该列在数据库中可能被指定为NOT NULL,但jOOQ(3.15.1)目前不提供非NULL记录字段(因为不能保证它们在例如外部联接中是非NULL)。
对于不可空属性,我找到的最简单的解决方案是以下构造:
multiset(
select(
FILM_ACTOR.actor().FIRST_NAME,
FILM_ACTOR.actor().LAST_NAME
)
.from(FILM_ACTOR)
.where(FILM_ACTOR.FILM_ID.eq(FILM.FILM_ID))
).`as`("actors").convertFrom(List::class.java) { it.map { s -> Actor(s.value1()!!, s.value2()!!) } },
我禁用了intellij对话框,该对话框要求将Java代码转换为Kotlin代码,在从Java复制粘贴代码到Kotlin时,我认为它总是可以不问就转换,但现在它永远不会转换。如何再次启用此对话框?我找不到任何方法来实现它,现在IDE不再将Java转换为复制+粘贴的Kotlin。
null null 它如何记住字符串和double,加宽/上转换应该记住超类的状态和方法。 如何访问子类类型和值?
问题内容: 我正在创建一个日期时间字符串,如下所示: 使用以下代码,我在Firefox中获得无效的日期,但在Chrome中正常运行 在firefox中,date1给我一个无效的日期,但是在chrome中,它的工作正常,主要原因是什么? 问题答案: 您无法以任何方式实例化日期对象。它必须以特定的方式。以下是一些有效的示例: 要么
在那里我等待电子表格的src和dst键。 在ruby中,我使用google_drive gem上传文件并调用Google应用程序脚本
转换操作引入不同类之间的替代性。替代性的意思是一个类可以被另外一个类代替。这有一个好处:一个子类可以代替基类,像下面 shape 继承结构给出例子。你定义基类 Shape 并自定义它的子类: Rectangle , Ellipse , Circle 等。在期望是 Shape 的地方你可以用 Circle 代替它。这是使用多态的替代性。这个是因为 Circle 是 Shape 的一个特别类型。当你创
在Kotlin中,编译以下代码: 但是,该代码不: 编译此代码将导致以下错误: 在Java中,两个示例都无法编译: 不出所料,前面的两个代码片段都会产生熟悉的编译器错误: 令我惊讶的是,第一个 Kotlin 示例根本有效,其次,如果它有效,为什么第二个 Kotlin 示例会失败?Kotlin 是否将方法的返回类型视为其签名的一部分?此外,为什么 Kotlin 中的方法签名与 Java 相比,它遵循