kotlin学习之泛型(十四)
生活随笔
收集整理的這篇文章主要介紹了
kotlin学习之泛型(十四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1. 泛型
- 2. 通配符(上下界)
- 3. 泛型函數
- 4. 泛型約束
本小結介紹的是kotlin的泛型,先從Java的泛型開始介紹:
1. 泛型
kotlin中使用泛型的方式跟Java相差不大:
class Box<T>(t: T) {var value = t }// 使用 val box: Box<Int> = Box<Int>(1) //kotlin可以自動推斷類型 val box2 = Box(1)2. 通配符(上下界)
Java
Java中,在沒有通配符上下界的情況下,是不可變的,也就是說,在指定泛型類型后,Java就能在編譯期確定泛型的類型,防止運行時出現異常。為了泛型的靈活性,提出了通配符上下界。
之所以不能添加元素的原因很明顯,因為沒法確定添加的實例類型跟定義的類型是否匹配。
不得不說,這樣做法是合理的,但是是可能會出錯的。來看看Kotlin是怎么實現類似的情況的。
kotlin
在Kotlin中,使用聲明位置變異來解決這種問題:
這種做法實際上就是對應Java中的<? extends T>,因為只能作為返回值而不能作為參數,所以不會出現Java可能出現的運行異常。
這樣是不是更加合理了呢? 用一句概括Kotlin的這種做法,就是:
Consumer in, Producer out!
3. 泛型函數
Kotlin同樣支持泛型函數:
fun <T> singletonList(item: T): List<T> { }fun <T> T.basicToString() : String { // extension function }使用的時候,在函數名稱后面指定具體的類型參數:
val l = singletonList<Int>(1)
4. 泛型約束
Kotlin的泛型約束和類的繼承一樣,使用:代替extends對泛型的的類型上界進行約束:
class SwipeRefreshableView<T : View>{}同時Kotlin支持多個類型的上界約束,,使用where關鍵字:
class SwipeRefreshableView<T>where T : View,T : Refreshable { }總結
以上是生活随笔為你收集整理的kotlin学习之泛型(十四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin学习之集合(十三)
- 下一篇: Android总结 之 AsyncTas