Обертывание метода в командах с использованием обработки аннотаций - PullRequest
0 голосов
/ 03 октября 2018

У меня есть куча задач, которые необходимо выполнить до и после вызова метода.

Мой подход заключается в использовании обработки аннотаций и пользовательских аннотаций для этого.

@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.Я также изучал Ломбок, но не могу использовать эту библиотеку.

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете предоставлять задачи через функцию более высокого порядка - функцию-обертку:

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 из-за удаления мертвого кода (абстракции без затрат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...