在经一步封装成 LogUtils.printCostTime{ }.xxx{ }.xxx{ }.xxx{ } 这样的使用方法
时间: 2024-02-14 08:29:24 浏览: 117
好的,我可以帮你封装一个 `LogUtils.printCostTime` 的工具类,以便你可以使用链式调用的方式打印方法耗时。以下是一个示例的 Kotlin 代码:
```kotlin
import java.util.concurrent.TimeUnit
// 表格打印方法耗时
fun logMethodExecutionTime(tag: String, methodName: String, executionTime: Long) {
val threadName = Thread.currentThread().name
val formattedTime = String.format("%02d:%02d:%02d.%03d",
TimeUnit.MILLISECONDS.toHours(executionTime),
TimeUnit.MILLISECONDS.toMinutes(executionTime) % 60,
TimeUnit.MILLISECONDS.toSeconds(executionTime) % 60,
executionTime % 1000)
val headerFormat = "| %-10s | %-20s | %-12s |"
val rowFormat = "| %-10s | %-20s | %-12s |"
val separator = "+------------+----------------------+--------------+"
val header = String.format(headerFormat, "Thread", "Method", "Execution Time")
val row = String.format(rowFormat, threadName, methodName, formattedTime)
println(separator)
println(header)
println(separator)
println(row)
println(separator)
}
// LogUtils 工具类
class LogUtils {
companion object {
private var startTime: Long = 0
fun printCostTime(tag: String, methodName: String): LogUtils {
startTime = System.currentTimeMillis()
return this
}
fun <T> xxx(result: T): LogUtils {
val endTime = System.currentTimeMillis()
val executionTime = endTime - startTime
logMethodExecutionTime("TAG", "Method", executionTime)
return this
}
}
}
// 使用示例
fun main() {
LogUtils.printCostTime("TAG", "Method A")
.xxx("Result A")
.xxx("Result B")
.xxx("Result C")
}
```
在上面的代码中,我们创建了一个名为 `LogUtils` 的工具类。它包含了一个 `printCostTime` 方法,用于开始记录方法耗时,并返回 `LogUtils` 对象以支持链式调用。然后,我们定义了一个泛型的 `xxx` 方法,用于打印方法耗时,并返回 `LogUtils` 对象以继续链式调用。
在示例中,我们使用 `LogUtils.printCostTime("TAG", "Method A")` 开始记录方法 A 的耗时,然后使用 `.xxx("Result A")` 打印方法 A 的结果并计算耗时,接着使用 `.xxx("Result B")` 打印方法 B 的结果并计算耗时,最后使用 `.xxx("Result C")` 打印方法 C 的结果并计算耗时。
请注意,以上代码只是一个示例,并且没有包含完整的异常处理和线程安全性。在实际使用中,你可能需要根据你的需求进行适当的调整和扩展。
阅读全文