为了活动小家电-注解Annotation(一)

152 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的23天,点击查看活动详情

开发Android的时候,随便用了很多注解,很好奇这些注解背后到底是怎么回事。所以,利用rehab期间,我会尝试挖掘一次注解,做一个简单决定数据模型的字段有效性的注解。

什么是注解?

在 Android 上工作时,您可能已经看到很多 @Deprecated、@SuppressWarnings 和 @IntRange。这些称为注释。
Annotation 这个词的意思是注解,但它比我们所知道的那个注解要强大得多。与注释不同,您可以为特定代码附加一些含义或注入功能。


注释类型

注释分为三个主要类别。

  1. Kotlin/Android 内置注解
  2. 元注解,这是一个注解,用来表示关于Annotation的信息
  3. 开发者创建的自定义注解\
    • 使用反射
    • 使用代码生成

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) 。\

其中大部分是熟悉的注解,所以我将在这里就不继续赘述。

为了活动小家电,下篇继续搞!