Можно ли определить функцию расширения Котлина на таком аннотированном типе?
@ColorInt fun @ColorInt Int.darken(): Int { return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) }
Альтернативная форма:
@ColorInt fun (@ColorInt Int).darken(): Int { return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) }
Это соответствовало бы следующим статическим функциям:
@ColorInt fun darken(@ColorInt color: Int): Int { return ColorUtils.blendARGB(color, Color.BLACK, 0.2f) }
Я не думаю, что это возможно с использованием Kotlin, но можно ли добавить эту функцию в более поздние версии Kotlin?
На стороне примечания: тот же вопрос относится к @IntDef
, @StringDef
, @[resource type]Res
также.
Да, ты можешь. Используйте следующий синтаксис:
@ColorInt fun @receiver:ColorInt Int.darken(): Int { return ColorUtils.blendARGB(this, Color.BLACK, 0.2f) }
Подробнее о целях использования целевых объектов аннотации: http://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets