我正在嘗試覆寫error().kotlin-logging
以下代碼接近我想要的,但我不明白一些事情(我是 Kotlin 的新手)。
示例代碼:
import mu.KLogger
import mu.KotlinLogging
open class BgrLogging(
private val delegate: KLogger
) : KLogger by delegate {
override fun error(msg: () -> Any?) {
delegate.error("$msg xxxx")
}
}
fun KLogger.toBgrLogging() = BgrLogging(this)
private val logger = KotlinLogging.logger {}.toBgrLogging()
我希望能夠error()像這樣呼叫我的重寫方法:
logger.error("should override error")
// Output: should override error
…不幸的是,這似乎跳過了我的覆寫并error()在kotlin-logging.
如果我使用 lambda:
logger.error{ "should override error" }
// Output: () -> kotlin.Any? xxxx
它呼叫我的覆寫(耶!),但輸出不是我想要的。
觀察
當我kotlin-logging直接呼叫(沒有覆寫)時,這兩個似乎都像我預期的那樣作業:
logger.error("foo1")
logger.error{ "foo1" }
它在傳遞字串時輸出字串。
問題
是否可以同時獲取logger.error("xxxx")并logger.error{ "xxxx" }呼叫我的覆寫函式?我希望這兩個呼叫都輸出實際的字串,而不是() -> kotlin.Any?.
Java 17
Kotlin Compiler Version: 1.6.10
kotlin-logging 1.5.4
uj5u.com熱心網友回復:
logger.error("should override error")
不會呼叫您的覆寫error,因為它具有簽名(String) -> Unit,而您僅使用簽名覆寫錯誤(() -> Any?) -> Unit。在 Kotlin 的模型中,多載函式彼此完全分離。
如果你想error在呼叫字串時覆寫,你也必須覆寫該方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523757.html
上一篇:如何合并兩個二維陣列
下一篇:通過屬性查找列舉項
