携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的23天,点击查看活动详情
开发Android的时候,随便用了很多注解,很好奇这些注解背后到底是怎么回事。所以,利用rehab期间,我会尝试挖掘一次注解,做一个简单决定数据模型的字段有效性的注解。
什么是注解?
在 Android 上工作时,您可能已经看到很多 @Deprecated、@SuppressWarnings 和 @IntRange。这些称为注释。
Annotation 这个词的意思是注解,但它比我们所知道的那个注解要强大得多。与注释不同,您可以为特定代码附加一些含义或注入功能。
注释类型
注释分为三个主要类别。
- Kotlin/Android 内置注解
- 元注解,这是一个注解,用来表示关于Annotation的信息
- 开发者创建的自定义注解\
- 使用反射
- 使用代码生成
Kotlin/Android 内置注解
下面我们来看看 Kotlin/Android 中经常使用的一些内置注解。
Deprecated
@Deprecated("弃用的api")
fun test(a: Int, b: Int): Int = a + b
fun test() {
LogUtils.v(test(1, 2))
}
首先@Deprecated,它是Annotation。它附加到特定的函数、类、字段、构造函数等,以发出不应再使用它的警告。使用带有相应注释的代码时,IDE 通常会用删除线将其标记为已弃用。
IntRange
fun sum(@IntRange(from = 0, to = 50) a: Int, @IntRange(from = 50, to = 100) b: Int): Int = a + b
fun test() {
LogUtils.v(sum(37, 1000))
}
@IntRange注解。它通过将 Int 值附加到特定函数、参数或字段来限制其范围。
如果您尝试将值放在该范围之外,编译器会抛出错误。
JvmOverloads
class CheckBoxSearchTextView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
.......
}
@JvmOverloads注解。当为函数或构造函数参数设置默认值时,Kotlin 编译器会创建一个与默认值一样多的重载函数。
在上面的示例中, 自动创建了三个构造函数
CheckBoxSearchTextView(context: Context)
CheckBoxSearchTextView(context: Context, attrs: AttributeSet?)
CheckBoxSearchTextView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) 。\
其中大部分是熟悉的注解,所以我将在这里就不继续赘述。