反射和注解
目录
1.反射1.1类引用1.2函数引用1.3属性引用
2.注解2.1声明注解
2.2构造函数
1.反射
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Kotlin中使用反射功能所需的运行时组件作为单独的 JAR 文件(kotlin-reflect.jar)分发。这样做是为了减少不使用反射功能的应用程序所需的运行时库的大小。如果用Android Studio运行Kotlin项目,一般会在创建工程时,自动引入(kotlin-reflect.jar)
1.1类引用
Java代码
Kotlin代码
在Kotlin中,用类名+两个冒号+class(如果是java类要在后面加上.java)表示获取这个类的对象。
1.2函数引用
Java代码
运行代码,得到结果:
Kotlin代码
运行代码,得到结果:
在Kotlin中,可以用类名+两个冒号+函数名直接获取这个函数的对象;或者利用Java反射机制调用方法来获取函数的对象。
1.3属性引用
Java代码
运行代码,得到结果:
Kotlin代码
运行代码,得到结果:
在Kotlin中,可以用类名+两个冒号+属性名直接获取属性对象;或者通过Java反射机制获取属性的方法来获取或修改属性值。
2.注解
2.1注解声明
Java声明注解
Kotlin声明注解
注解的附加属性可以通过用元注解标注注解类来指定:
指定可以用该注解标注的元素的可能的类型(类、函数、属性、表达式等);
指定该注解是否存储在编译后的 class 文件中,以及它在运行时能否通过反射可见 (默认都是 true);
允许在单个元素上多次使用相同的该注解;
指定该注解是公有 API 的一部分,并且应该包含在生成的 API 文档中显示的类或方法的签名中。
Java添加元注解
Kotlin添加元注解
2.2构造函数
注解类可以带有构造函数
Kotlin代码
Java代码
注解类的构造函数只允许下列参数类型:
对应于 Java 原生类型的类型(Int、 Long等);
字符串;
类(Foo::class);
枚举;
其他注解;
上面已列类型的数组。
Kotlin中只允许用val声明参数
当参数类型是其他注解时,该注解类的名字前面不能用@
总结
注解和反射都是很多应用中使用到的技术,而本篇文章主要对比了注解和反射在Java和Kotlin中写法的差别。
参考文献:Kotlin语言中文站、《Kotlin程序开发入门精要》
领取专属 10元无门槛券
私享最新 技术干货