我在我的服务中创建了一个自定义结果字段(而不是 Kotlin 的结果),因此我可以在成功和失败案例中返回一个消息字段:
sealed class Result<T> {
data class Success<T>(val value: T, val message: String) : Result<T>()
data class Failure<T>(val throwable: Throwable? = null, val message: String) : Result<T>() {
val isExceptional = throwable != null
val error: Throwable
get() = throwable ?: error("Error is undefined in [$this]")
}
}
然后在另一个类中,我调用了一个产生此结果的方法并希望记录 Result.message
logger.info { "Finished with message [${result.message}]." }
只是,kotlin 编译器无法识别“消息”,因为它不是 Result 的直接属性,而是 Success 和 Failure 的属性。
我试图覆盖消息字段并在 Result 类中定义它。但我得到一个错误。
Error:(10, 38) Kotlin: 'message' in 'Result' is final and cannot be overridden
那么,如何在不将结果实例强制转换为它的派生实现类(成功或失败)的情况下访问 Result.message 呢?