Kotlin教程:元注解(Meta-annotations)|TYPE注解示例

2020-04-2311:26:38编程语言入门到精通Comments1,617 views字数 1926阅读模式

注解用于在编译时将元数据附加到类,接口,参数等。 编译器可以在运行时反射注解。可以根据注解值更改数据或程序的含义。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

Kotlin 元注解(Meta-annotations)

可以在声明注解时添加元信息。 以下是一些元注解的说明:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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

使用注解的示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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

声明注解

通过将注解修饰符放在类的前面来声明注解。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

annotation class MyClass
Kotlin

注解构造函数

也可以注解类的构造函数。 这是通过为构造函数声明添加构造函数关键字并在它的前面放置注解来完成的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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

注解属性访问器

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

使用构造函数作为注解

也可以使用构造函数作为注解,使用构造函数作为注解需要参数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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

用作注解的参数不能是可空类型,这是因为JVM不支持null作为注解属性的值。也可以使用一个注解作为另一个注解的参数,在这种情况下它不能使用前缀@字符。 例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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

Kotlin还指定一个类可以使用KClass来获取注解的参数。 Kotlin编译器自动将它转换为java类,这就像通常看到注解和参数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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

使用TYPE注解的示例

创建一个java注解接口Ann.java -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

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();  
}
Java

创建一个使用Ann接口注解的MyClass.kt类。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

@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)  
    }  
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

Value: 10

//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/kotlin/kotlin-annotations.html#article-start文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18293.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/18293.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定