在方法调用之前和之后,我有一堆任务需要执行。
我的方法是使用批注处理和自定义批注来实现。
@BeforeSomething(task = 'something')
@AfterSomething(task = 'something else')
fun something(blah: Something) {
Log.d("Something", "Something $blah")
}
这样,从仅运行此方法的最终输出可能像:
Before task, options 'something'
Something blahblahblah
After task, options 'somethign else'
什么是最好的方法?我已经研究过AspectJ,但是那与Kotlin无关。我也研究了Lombok,但无法使用该库。
答案 0 :(得分:0)
您可以通过高阶函数-包装函数来提供任务:
inline fun <T> wrapFunction(before: Task? = null, after: Task? = null, body: () -> T): T =
try {
before?.run()
body()
} finally {
after?.run()
}
fun something(blah: String) = wrapFunction(before = BeforeTask, after = AfterTask) {
println("Something")
}
这不需要额外的工具,并且可以安全重构。
如果您不提供before
或after
参数,由于消除了无效代码(无成本的抽象方法),Kotlin编译器甚至不会生成null
检查。