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()
}
Run Code Online (Sandbox Code Playgroud)
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()
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我今天早些时候遇到了同样的问题。我花了一些时间才弄明白。
根据错误消息,编译器无法推断 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()
}
Run Code Online (Sandbox Code Playgroud)
这里的主要区别是 jdbi.useHandle<Exception>{ ...
而不仅仅是 jdbi.useHandle{ ...
我希望这有帮助!它肯定也让我绊倒了一分钟。
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |