android kotlin與Java互操作(一)在 Kotlin 中呼叫 Java 程式碼
阿新 • • 發佈:2019-01-08
已對映型別
Kotlin 特殊處理一部分 Java 型別。這樣的型別不是“按原樣”從 Java 載入,而是 對映 到相應的 Kotlin 型別。 對映只發生在編譯期間,執行時表示保持不變
Java 型別 | Kotlin 型別 |
---|---|
byte | kotlin.Byte |
short | kotlin.Short |
int | kotlin.Int |
long | kotlin.Long |
char | kotlin.Char |
float | kotlin.Float |
double | kotlin.Double |
boolean | kotlin.Boolean |
Java 的裝箱原始型別對映到可空的 Kotlin 型別:
Java type | Kotlin type |
---|---|
java.lang.Byte | kotlin.Byte? |
java.lang.Short | kotlin.Short? |
java.lang.Integer | kotlin.Int? |
java.lang.Long | kotlin.Long? |
java.lang.Character | kotlin.Char? |
java.lang.Float | kotlin.Float? |
java.lang.Double | kotlin.Double? |
java.lang.Boolean | kotlin.Boolean? |
請注意,用作型別引數的裝箱原始型別對映到平臺型別:
例如,
List<java.lang.Integer> 在 Kotlin 中會成為 List<Int!>。
集合型別在 Kotlin 中可以是隻讀的或可變的,因此 Java 集合型別作如下對映: (下表中的所有 Kotlin 型別都駐留在 kotlin.collections包中):
Java 型別 | Kotlin 只讀型別 | Kotlin 可變型別 | 載入的平臺型別 |
---|---|---|---|
Iterator | Iterator | MutableIterator | (Mutable)Iterator! |
Iterable | Iterable | MutableIterable | (Mutable)Iterable! |
Collection | Collection | MutableCollection | (Mutable)Collection! |
Set | Set | MutableSet | (Mutable)Set! |
List | List | MutableList | (Mutable)List! |
ListIterator | ListIterator | MutableListIterator | (Mutable)ListIterator! |
Map | Map | MutableMap | (Mutable)Map! |
Map.Entry | Map.Entry | MutableMap.MutableEntry | (Mutable)Map.(Mutable)Entry! |
Java 的陣列按下文所述對映:
Java 型別 | Kotlin 型別 |
---|---|
int[] | kotlin.IntArray! |
String[] | kotlin.Array<(out) String>! |
Kotlin 中的 Java 泛型
Kotlin 的泛型與 Java 有點不同(參見泛型)。當將 Java 型別匯入 Kotlin 時,我們會執行一些轉換:
Java 的萬用字元轉換成型別投影
Foo<? extends Bar> 轉換成 Foo<out Bar!>!
Foo<? super Bar> 轉換成 Foo<in Bar!>!
Java的原始型別轉換成星投影
List 轉換成 List<*>!,即 List
if (Character.isLetter(a)) {
// ……
}