个性化阅读
专注于IT技术分析

Kotlin注释

本文概述

注释用于在编译时将元数据附加到类, 接口, 参数等。批注可以由编译器使用, 它会在运行时反映出来。我们可以根据注释值更改数据或程序的含义。

Kotlin元注释

我们可以在声明注释时添加元信息。以下是一些元注释:

注解名称 用法
@Target 它针对可以用注释注释的所有可能种类的元素。
@Retention 它指定注释是存储在已编译的类文件中, 还是在运行时通过反射可见。
@Repeatable 此元批注确定批注在单个代码元素上适用两次或多次。
@MustBeDocumented 此元文档指定注释是公共API的一部分, 应包含在类或方法中。

使用注释的示例

@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION)
@Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class MyClass

声明注释

通过将注释修饰符放在类前面来声明注释。

annotation class MyClass

注释构造函数

也可以注释类的构造函数。这是通过为构造函数声明添加builder关键字并将注释放在其前面来完成的。

class MyClass@Inject constructor( dependency: MyDependency){
//. . . 
}

注释财产评估员

class MyClass{
var a: MyDependency? = null
                    @Inject set
}

使用构造函数作为注释

我们还可以使用构造函数作为注释。使用构造函数作为注释需要参数。

annotation class MyClass(val why: String)
@MyClass("parameter") class Foo{
}

用作注释的参数不能为可空类型。这是因为JVM不支持将null作为注释属性的值。

我们还可以将一个注释用作另一个注释的参数, 在这种情况下, 它不能使用前缀@字符。例如:

annotation class ReplaceWith(val expression: String)
annotation class Deprecated(
val message: String, val replaceWith: ReplaceWith = ReplaceWith(""))
@Deprecated("This function is deprecated, use === instead", ReplaceWith("this === other"))

Kotlin还指定类可以使用KClass接受注释的自变量。 Kotlin编译器会自动将其转换为java类, 从而可以正常查看批注和参数。

import kotlin.reflect.KClass
annotation class MyClass(val arg1: KClass<*>, val arg2: KClass<out Any>)
@MyClass(String::class, Int::class) class Foo

使用TYPE注释的示例

创建一个Java注释接口Ann.java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface  Ann{
int value();
}

创建一个使用注释接口Ann的MyClass.kt类。

@Ann(value = 10)
class MyClass{

}
fun main (args: Array<String>){
var c = MyClass()
var x = c.javaClass.getAnnotation(Ann::class.java)
    if(x!=null){
println("Value:"+x?.value)
    }
}

输出:

Value: 10
赞(0)
未经允许不得转载:srcmini » Kotlin注释

评论 抢沙发

评论前必须登录!