面试题答案
一键面试KAPT注解处理工具的主要作用
KAPT(Kotlin Annotation Processing Tool)是Kotlin用于处理注解的工具。它允许开发者在编译时期处理自定义注解,生成额外的代码,实现代码生成、依赖注入、数据绑定等功能,提升开发效率并减少样板代码。
简单使用示例
-
自定义注解
@Retention(AnnotationRetention.SOURCE) @Target(AnnotationTarget.CLASS) annotation class MyAnnotation(val value: String)
上述代码定义了一个名为
MyAnnotation
的注解,它可以用于类,并且注解的值是一个字符串。@Retention(AnnotationRetention.SOURCE)
表示该注解仅保留在源码阶段,编译后不会保留在字节码中。 -
注解处理器 首先创建一个
build.gradle.kts
文件(如果是Kotlin DSL构建脚本),添加以下依赖用于编写注解处理器:dependencies { implementation(kotlin("stdlib")) implementation("com.google.auto.service:auto-service:1.0-rc7") annotationProcessor("com.google.auto.service:auto-service:1.0-rc7") }
然后编写注解处理器:
@AutoService(Processor::class) class MyAnnotationProcessor : AbstractProcessor() { override fun process( annotations: MutableSet<out TypeElement>, roundEnv: RoundEnvironment ): Boolean { for (element in roundEnv.getElementsAnnotatedWith(MyAnnotation::class.java)) { val annotation = element.getAnnotation(MyAnnotation::class.java) processingEnv.messager.printMessage(Diagnostic.Kind.NOTE, "Processed ${element.simpleName} with value ${annotation.value}") } return true } override fun getSupportedAnnotationTypes(): MutableSet<String> { return mutableSetOf(MyAnnotation::class.java.canonicalName) } override fun getSupportedSourceVersion(): SourceVersion { return SourceVersion.latestSupported() } }
这里使用
@AutoService
注解来自动注册处理器。process
方法中处理被MyAnnotation
注解的元素,打印相关信息。getSupportedAnnotationTypes
方法指定该处理器支持的注解类型,getSupportedSourceVersion
方法指定支持的源码版本。 -
在项目中配置使用KAPT 在项目的
build.gradle.kts
(模块级)中:apply plugin: 'kotlin - kapt' dependencies { implementation project(':annotation - api') kapt project(':annotation - processor') }
这里假设自定义注解在
annotation - api
模块,注解处理器在annotation - processor
模块。apply plugin: 'kotlin - kapt'
应用KAPT插件,kapt
配置指定使用的注解处理器模块。如果是
build.gradle
(Groovy DSL),配置如下:apply plugin: 'kotlin - kapt' dependencies { implementation project(':annotation - api') kapt project(':annotation - processor') }