Kotlin可以为已有的类型指定另一个可读性更强的名字。使用typealias来定义类型别名。其语法格式如下:
typealias 类型别名 = 已有类型
如果类型名太长,可以使用较短的新名称替代原类型名。
typealias FileTable<K> = MutableMap<K, MutableList<File>>
fun main(args: Array<String>) {
var table:FileTable<String>
}
也可以通过定义别名为内部类起一个更短的名字。
class A {
inner class Inner
}
class B {
inner class Inner
}
//为A.Inner指定别名
typealias AInner = A.Inner
//为B.Inner指定别名
typealias BInner = B.Inner
fun main(args: Array<String>) {
var a: AInner = A().AInner()
var b = B().BInner()
}
Kotlin与Java的Lambda表达式的差别:
Java的Lambda表达式的类型是函数式接口,而Kotlin的Lambda表达式的类型直接就是函数类型,所以Kotlin也允许为Lambda表达式的类型指定别名。
typealias Predicate<T> = (T) -> Boolean
fun main(args: Array<String>) {
val p: Predicate<String> = {
it.length > 4
}
//为filter()方法传入p参数,只保留长度大于4的字符串
println(arrayOf("Java", "Objective-C", "Go", "Kotlin").filter(p))
}
输出结果:
[Objective-C, Kotlin]
网友评论