1. 程式人生 > >android kotlin與Java互操作(一)在 Kotlin 中呼叫 Java 程式碼

android kotlin與Java互操作(一)在 Kotlin 中呼叫 Java 程式碼

已對映型別
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)) {
    // ……
}