Kotlin中如何自定义等效于固定参数@FloatRange的注解别名?
Kotlin自定义注解问题解答
1. 注解自定义支持情况
Kotlin原生支持自定义注解,不需要额外扩展能力即可实现你的需求。
2. 实现@NormalizedRange等价注解的方案
你要的固定参数别名注解可以通过注解嵌套的方式实现,和直接使用@FloatRange(from = 0.0, to = 1.0)效果完全一致,代码示例如下(以AndroidX提供的@FloatRange为例):
import androidx.annotation.FloatRange import kotlin.annotation.AnnotationRetention.BINARY import kotlin.annotation.AnnotationTarget.* // 限定注解的使用场景,和FloatRange支持的场景保持一致即可 @Target( FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, VALUE_PARAMETER, FIELD, LOCAL_VARIABLE ) // 保留到编译期即可,和原生FloatRange的保留策略一致 @Retention(BINARY) // 固定FloatRange的参数 @FloatRange(from = 0.0, to = 1.0) annotation class NormalizedRange
3. 效果说明
- 上述实现的
@NormalizedRange会被Lint等编译检查工具完全识别,和直接写带参数的@FloatRange没有功能差异 - 如果你的使用场景是运行时读取注解,只需要在自定义注解处理器、AOP逻辑中补充
@NormalizedRange到固定参数@FloatRange的映射规则即可
内容的提问来源于stack exchange,提问作者Nickolas Konstantakop
相关产品推荐
相关产品推荐

