学习Kotlin(七)反射和注解
?
推薦閱讀:
學(xué)習(xí)Kotlin(一)為什么使用Kotlin
學(xué)習(xí)Kotlin(二)基本語法
學(xué)習(xí)Kotlin(三)類和接口
學(xué)習(xí)Kotlin(四)對象與泛型
學(xué)習(xí)Kotlin(五)函數(shù)與Lambda表達(dá)式
學(xué)習(xí)Kotlin(六)擴(kuò)展與委托
學(xué)習(xí)Kotlin(七)反射和注解
學(xué)習(xí)Kotlin(八)其他技術(shù)
Kotlin學(xué)習(xí)資料總匯
?
目錄
- 1.反射
1.1類引用
1.2函數(shù)引用
1.3屬性引用 - 2.注解
2.1聲明注解
2.2構(gòu)造函數(shù)
1.反射
反射機(jī)制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性,這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。Kotlin中使用反射功能所需的運行時組件作為單獨的 JAR 文件(kotlin-reflect.jar)分發(fā)。這樣做是為了減少不使用反射功能的應(yīng)用程序所需的運行時庫的大小。如果用Android Studio運行Kotlin項目,一般會在創(chuàng)建工程時,自動引入(kotlin-reflect.jar)
1.1類引用
- Java代碼
- Kotlin代碼
在Kotlin中,用類名+兩個冒號::+class(如果是java類要在后面加上.java)表示獲取這個類的對象。
1.2函數(shù)引用
- Java代碼
運行代碼,得到結(jié)果:
- Kotlin代碼
運行代碼,得到結(jié)果:
在Kotlin中,可以用類名+兩個冒號::+函數(shù)名直接獲取這個函數(shù)的對象;或者利用Java反射機(jī)制調(diào)用getMethod()方法來獲取函數(shù)的對象。
1.3屬性引用
- Java代碼
運行代碼,得到結(jié)果:
- Kotlin代碼
運行代碼,得到結(jié)果:
在Kotlin中,可以用類名+兩個冒號::+屬性名直接獲取屬性對象;或者通過Java反射機(jī)制獲取屬性的get/set方法來獲取或修改屬性值。
?
2.注解
2.1注解聲明
Java聲明注解
public @interface MyAnnotation { }Kotlin聲明注解
annotation class MyAnnotation注解的附加屬性可以通過用元注解標(biāo)注注解類來指定:
- @Target?指定可以用該注解標(biāo)注的元素的可能的類型(類、函數(shù)、屬性、表達(dá)式等);
- @Retention?指定該注解是否存儲在編譯后的 class 文件中,以及它在運行時能否通過反射可見 (默認(rèn)都是 true);
- @Repeatable?允許在單個元素上多次使用相同的該注解;
- @MustBeDocumented?指定該注解是公有 API 的一部分,并且應(yīng)該包含在生成的 API 文檔中顯示的類或方法的簽名中。
Java添加元注解
@Target(ElementType.METHOD)//表示可以在方法中使用 @Retention(RetentionPolicy.RUNTIME)//表示運行時注解 public @interface MyAnnotation { }Kotlin添加元注解
@Target(AnnotationTarget.FUNCTION)//表示可以在函數(shù)中使用 @Retention(AnnotationRetention.RUNTIME)//表示運行時注解 annotation class MyAnnotation2.2構(gòu)造函數(shù)
注解類可以帶有構(gòu)造函數(shù)
- Kotlin代碼
- Java代碼
注解類的構(gòu)造函數(shù)只允許下列參數(shù)類型:
- 對應(yīng)于 Java 原生類型的類型(Int、 Long等);
- 字符串;
- 類(Foo::class);
- 枚舉;
- 其他注解;
- 上面已列類型的數(shù)組。
- Kotlin中只允許用val聲明參數(shù)
- 當(dāng)參數(shù)類型是其他注解時,該注解類的名字前面不能用@
總結(jié)
注解和反射都是很多應(yīng)用中使用到的技術(shù),而本篇文章主要對比了注解和反射在Java和Kotlin中寫法的差別。
原文鏈接:https://juejin.im/post/5a98c613518825558722f7b8
總結(jié)
以上是生活随笔為你收集整理的学习Kotlin(七)反射和注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习Kotlin(六)扩展与委托
- 下一篇: 学习Kotlin(八)其他技术