这不是重复。“对象”表达式是关键字。
我正在尝试将 Timber Android 库与https://github.com/orhanobut/logger集成,我需要一个 customLogStrategyForTimber 来满足我的需要。
我想出了这个逻辑。但是我在初始化时遇到了困难customLogStrategyForTimber
class App : Application() {
// I CREATED THE lateinit VARIABLE
lateinit var customLogStrategyForTimber: LogStrategy
override fun onCreate() {
super.onCreate()
Timber.plant(object : Timber.DebugTree() {
override fun log(
priorityTimber: Int, tagTimber: String?, message: String, t: Throwable?
) {
// USED THE lateinit HERE
customLogStrategyForTimber = object : LogcatLogStrategy() {
override fun log(priority: Int, tag: String?, message: String) {
super.log(priorityTimber, tagTimber, message)
}
}
println("customLogStrategyForTimber: ${::customLogStrategyForTimber.isInitialized}") // PRINTS TRUE
}
})
println("customLogStrategyForTimber OUTSIDE: ${::customLogStrategyForTimber.isInitialized}") // PRINTS FALSE - WHY??
var formatStrategy1 = PrettyFormatStrategy.newBuilder()
// TRYING TO CALL THE lateinit VARIABLE HERE
// NOW, HERE THE lateinit IS NOT INITIALIZED.
.logStrategy(customLogStrategyForTimber)
.build()
Logger.addLogAdapter(AndroidLogAdapter(formatStrategy1))
}
}
customLogStrategyForTimber
永远不会初始化。有没有更好的方法来做这个逻辑?尝试formatStrategy
在第一个覆盖有趣的日志方法中添加整个代码会导致使用 Timber 日志记录时出现意外行为,因此这似乎不是一个简单的选择。
运行应用程序时崩溃
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property customLogStrategyForTimber has not been initialized
也试过使用isInitialized
。
它里面的代码永远不会运行。
编辑:
创建了一个示例项目:https ://github.com/shipsywor/demotimberlogger
编辑2:
我println
在上面的代码中添加了语句。您将看到::customLogStrategyForTimber.isInitialized
在代码的一个点返回 False,在另一个点返回 True
注意:我不能将 formatStrategy 代码放在 Timber.plant {...} 中。它会导致意外行为。