疯狂kotlin讲义连载之Kotlin的基础类型--类型别名

533 阅读2分钟

Kotlin提供了类似于C语言中typedef的功能:可以为已有的类型指定另一个可读性更强的名字。Kotlin提供了typealias来定义类型别名。typealias语句的语法格式为:

typealias 类型别名 = 已有类型

如果类型名太长,我们可以使用较短的新名称替代原类型名。它有助于缩短较长的泛型类型。 例如,通常缩减集合类型是很有吸引力的。

// 为Set<Network.Node>指定更短的别名NodeSet

typealias NodeSet = Set<Network.Node>

// 为MutableMap<K, MutableList<File>>指定更短的别名:FileTable<K>

typealias FileTable<K> = MutableMap<K, MutableList<File>>

接下来即可直接使用NodeSet、FileTable<K>命名变量。

var set: NodeSet

var table: FileTable<String>

很多时候,我们也可可以通过别名为内部类起一个更短的别名。例如如下程序。

程序清单:codes\02\2.10\AliasTest.kt

class A {

inner class Inner

}

class B {

inner class Inner

}

// 为A.Inner内部类指定别名

typealias AInner = A.Inner

// 为A.Inner内部类指定别名

typealias BInner = B.Inner

fun main(args: Array<String>) {

// 使用AInner定义变量、调用对象

var a: AInner = A().AInner()

// 使用BInner定义变量、调用对象

var b = B().BInner()

}

上面粗体字代码为A.Inner、B.Inner两个内部类分别指定了别名:AInner、BInner,接下来程序中即可使用AInner、BInner别名类定义变量、创建对象。

此外,Kotlin自己也大量利用了别名这个功能,Kotlin利用别名建立Kotlin类和Java类之间的关系。如下代码是Kotlin集合体系中定义的别名。

typealias kotlin.ArrayList<E> = java.util.ArrayList<E>

typealias kotlin.HashMap<K, V> = java.util.HashMap<K, V>

typealias kotlin.HashSet<E> = java.util.HashSet<E>

typealias kotlin.LinkedHashMap<K, V> = java.util.LinkedHashMap<K, V>

typealias kotlin.LinkedHashSet<E> = java.util.LinkedHashSet<E>

typealias kotlin.RandomAccess = java.util.RandomAccess

与Java相比,Kotlin的Lambda表达式是一个差别较大的特色功能:Java的Lambda表达式的类型是函数式接口,而Kotlin的Lambda表达式的类型直接就是函数类型,因此Kotlin也允许Lambda表达式的类型指定别名。例如如下代码。

程序清单:codes\02\2.10\AliasTest.kt

// 为(T) -> Boolean类型指定别名Predicate<T>

typealias Predicate<T> = (T) -> Boolean

// 使用Predicate<String>定义变量,该变量的值是一个Lambda表达式

val p: Predicate<String> = { it.length > 4 }

// 为filter()方法传入p参数,只保留长度大于4的字符串

println(arrayOf("Java", "Objective-C", "Go", "Kotlin").filter(p))


以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义
本书即将于2017年11月发售 敬请期待
往期连载

第二期:juejin.im/post/59c1d6…

第三期:juejin.im/post/59e407…

第四期:juejin.im/post/59ed77…

第五期:juejin.im/post/59eec3…

第六期:juejin.im/post/59effb…

第七期:juejin.im/post/59f153…

第八期:juejin.im/post/59f283…

第九期:juejin.im/post/59f686…

第十期:juejin.im/post/59f7ea…

第十一期:juejin.im/post/59f953…

第十二期:juejin.im/post/59fa7e…

第十三期:juejin.cn/post/684490…

相关书籍《疯狂Android讲义》https://item.jd.com/11689014.html