Как объявить тип функции throwable? - PullRequest
0 голосов
/ 18 июня 2020

Я знаю, что на kotlin -мультиплатформе вы можете аннотировать функцию с помощью @Throws, чтобы сделать ее бросаемой функцией. Таким образом, преобразованный код Java / Swift имеет модификатор throws для сигнатуры функции.

Однако, если у меня есть параметр функции, который также является функцией, как мне пометить эту функцию как функцию throwable?

например:

fun foo(run : () -> Unit) {}

у вышеуказанной функции есть параметр «run», который принимает закрытие / функцию. Но этот параметр будет скомпилирован без модификатора throws, так что в Java / Swift я не могу ничего выбросить в закрытие, передаваемое этой функции.

Я попытался добавить аннотацию @Throws к функция. Если поместить его за пределы объявления функции, функция foo () будет помечена как "throws". Помещение его в круглые скобки параметра до или после двоеточия приводит к ошибке, в которой говорится, что аннотация не применима к целевому «параметру значения» / «использованию типа»

Подводя итог, я ищу что-то например:

fun foo(@Throws(Throwable::class) run : () -> Unit)

or 

fun foo(run : @Throws(Throwable::class) () -> Unit)

Любые подсказки / помощь по этому вопросу очень приветствуются!

1 Ответ

4 голосов
/ 18 июня 2020

Вы не можете аннотировать параметр функции с помощью @Throws, потому что аннотация имеет следующие цели: AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER и AnnotationTarget.CONSTRUCTOR.

Созданный запрос функции : https://youtrack.jetbrains.com/issue/KT-39688

...