withHandle给出的错误是“没有足够的信息来推断类型变量X”。
但是如果我使用
val count = jdbi.withHandleUnchecked { handle ->
handle.createQuery("SELECT count(*) FROM levelmaster WHERE `LevelName` = 'Silver' AND `LevelId` >= :ugradingLevel")
.bind("ugradingLevel", ugradingLevel)
.mapTo(Int::class.java)
.findOnly()
}withHandleUnchecked它没有抛出任何错误。
下面是我的代码:(使用withHandle)
handle = jdbi.open()
val names = jdbi.withHandle { handle ->
handle.createQuery("SELECT count(*) FROM levelmaster WHERE `LevelName` = 'Silver' AND `LevelId` >= :ugradingLevel")
.bind("ugradingLevel", ugradingLevel)
.mapTo(Int::class.java)
.findOnly()
}发布于 2019-07-29 20:15:22
今天早些时候我遇到了同样的问题。我花了一点时间才弄明白。
根据错误消息,编译器无法推断X是什么类型。X是useHandle方法的类型参数,用于指定HandleConsumer将返回的异常类型(如果有的话)。在Kotlin中,我们用匿名函数表示HandleConsumer,所以实际上这个类型参数应该是我们的lambda可能抛出的任何异常。如果您查看一下useHandle方法的定义,就会更容易理解您需要做什么:)。
因此,修复此错误的方法是在useHandle之后指定显式类型。
这应该会修复这个错误:
jdbi.useHandle<Exception> { handle ->
handle.createQuery("SELECT count(*) FROM levelmaster WHERE `LevelName` = 'Silver' AND `LevelId` >= :ugradingLevel")
.bind("ugradingLevel", ugradingLevel)
.mapTo(Int::class.java)
.findOnly()
}这里的关键区别是jdbi.useHandle<Exception>{ ...
而不仅仅是jdbi.useHandle{ ...
我希望这对你有帮助!它肯定也让我被绊倒了一分钟。
https://stackoverflow.com/questions/57240002
复制相似问题