美文网首页
kotlin-注解

kotlin-注解

作者: Method | 来源:发表于2021-10-27 16:29 被阅读0次

什么是注解

注解实际上类似标签,例如时间管理大师就是某某的标签,苹果手机就是乔布斯的标签。在代码的世界里,注解就是类、方法、变量...的标签。它可以给特定的代码标注一些额外的信息,然后在不同时期,可以通过某种方式获取标签的信息来处理实际的代码逻辑,这种方式常常就是我们所说的反射

简单使用

自定义注解

注解格式 annotation class 注解名(注解属性:属性类型)

/**
 * 路由注解
 */
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class Route(val path:String)

注解使用

@Route("/main/route")
class RouteActivity:FragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

处理注解

class RouterUtils {
    fun skipActivity(acy:Activity){
        val annotation:Route? = acy.javaClass.getAnnotation(Route::class.java)
        annotation?.let {
            println(it.path)
            //根据path 跳转界面
        }
    }
}

主要就是通过类反射获取注解信息,然后进行下一步操作。

元注解

什么是元注解

注解的注解或者说注解的标签。

元注解有:

@Retention:注解保留的生命周期
@Target:注解对象的作用范围。
@Inherited:@Inherited标明所修饰的注解,在所作用的类上,是否可以被继承。
@Documented:如其名,javadoc的工具文档化,一般不关心。
  • @Retention

Retention说标明了注解被生命周期,对应RetentionPolicy的枚举,表示注解在何时生效:

SOURCE:只在源码中有效,编译时抛弃,如@Override,源码期会检验你重写是否正确

CLASS:编译class文件时生效。例如butterknife生成java文件等

RUNTIME:运行时才生效。注解会保留到运行时, 因此使用反射来解析注解
  • @Target

Target标明了注解的适用范围,对应ElementType枚举,明确了注解的有效范围。

TYPE:类、接口、枚举、注解类型。
FIELD:类成员(构造方法、方法、成员变量)。
METHOD:方法。
PARAMETER:参数。
CONSTRUCTOR:构造器。
LOCAL_VARIABLE:局部变量。
ANNOTATION_TYPE:注解。
PACKAGE:包声明。
TYPE_PARAMETER:类型参数。
TYPE_USE:类型使用声明
  • @Inherited 是否可以被继承,默认为false

  • @Documented 是否会保存到 Javadoc 文档中

Android注解

Android注解给我们提供了三种主要和其他注释供我们使用:

IntDef和StringDef注解;

资源类型注解;

Null注解;

其他实用注解

更多详细信息跳转查看

相关文章

网友评论

      本文标题:kotlin-注解

      本文链接:https://www.haomeiwen.com/subject/nejpaltx.html