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

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

typealias 类型别名 = 已有类型java

若是类型名太长,咱们可使用较短的新名称替代原类型名。它有助于缩短较长的泛型类型。 例如,一般缩减集合类型是颇有吸引力的。编程

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

typealias NodeSet = Set<Network.Node>dom

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

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

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

var set: NodeSetcode

var table: FileTable<String>orm

不少时候,咱们也可能够经过别名为内部类起一个更短的别名。例如以下程序。

程序清单: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.im/post/59fc1e…

相关书籍《疯狂Android讲义》https://item.jd.com/11689014.html
相关文章
相关标签/搜索