对有Java基础的小伙伴来说,掌握Kotlin的基本使用是很容易的。我们编程时,时刻都要与类型打交道,因此了解这两门语言的类型的对应关系,就可以在写Kotlin时借用很多Java的思考习惯。下面列出一些类型的对应关系:
1.Java拆箱基本类型对应的Kotlin类型
Java Type | Kotlin Type |
---|---|
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类型。
2.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? |
请留意:Java的装箱基本类型被用于类型参数时,会映射到一个Kotlin平台类型,如:
List<java.lang.Integer>
会映射为List<Int!>
。
3.Java内置类对应的Kotlin内置类
Java Type | Kotlin Type |
---|---|
java.lang.Object | kotlin.Any! |
java.lang.Cloneable | kotlin.Cloneable! |
java.lang.Comparable | kotlin.Comparable! |
java.lang.Enum | kotlin.Enum! |
java.lang.Annotation | kotlin.Annotation! |
java.lang.CharSequence | kotlin.CharSequence! |
java.lang.String | kotlin.String! |
java.lang.Number | kotlin.Number! |
java.lang.Throwable | kotlin.Throwable! |
4.集合类型的映射
在Kotlin中,集合类型可能是只读的,也可能是mutable
(可改变)的。因此,Java的集合类型映射如下:
Java type | Kotlin read-only type | Kotlin mutable type | Loaded platform type |
---|---|---|---|
Iterator<T> | Iterator<T> | MutableIterator<T> | (Mutable)Iterator<T>! |
Iterable<T> | Iterable<T> | MutableIterable<T> | (Mutable)Iterable<T>! |
Collection<T> | Collection<T> | MutableCollection<T> | (Mutable)Collection<T>! |
Set<T> | Set<T> | MutableSet<T> | (Mutable)Set<T>! |
List<T> | List<T> | MutableList<T> | (Mutable)List<T>! |
ListIterator<T> | ListIterator<T> | MutableListIterator<T> | (Mutable)ListIterator<T>! |
Map<K, V> | Map<K, V> | MutableMap<K, V> | (Mutable)Map<K, V>! |
Map.Entry<K, V> | Map.Entry<K, V> | MutableMap.MutableEntry<K,V> | (Mutable)Map.(Mutable)Entry<K, V>! |
5.Java数组对应的Kotlin数组
数组在Kotlin中是不可变的,不像Java。这就意味Kotlin不允许将一个Array赋值Array,这就可以阻止在运行中可能产生的错误。传递一个子类的数组作为一个超类数组给Kotlin的方法也是不允许的。这在Java方法中是允许的。数组与Java平台上的原始数据类型一起使用,以避免 装箱/拆箱操作。
由于Kotlin隐藏了这些实现细节,变通的方法是与Java代码接合。 所以Kotlin为每一个原生数组类型提供了专门的类IntArray
, DoubleArray
, CharArray
等来处理这种情况。它们不是Array类相关的,并向下编译为Java的基本数组以获得最大性能。
Java Array | Kotlin Array |
---|---|
byte[] | ByteArray |
short[] | ShortArray |
int[] | IntArray |
long[] | LongArray |
char[] | CharArray |
float[] | FloatArray |
double[] | DoubleArray |
boolean[] | BooleanArray |
Happy Ending!