参考资料

typealias

typealias 只能在顶级,而不能在类里面定义

给一个类型命名 Compare

  1. typealias Compare = (num1:Int,num2:Int)->Boolean

然后就可以将ExplainReasonCallback直接作为一个类型使用

typealias Compare = (num1:Int,num2:Int)->Boolean

fun min(list:Array<Int>,compare:Compare):Int{
    if (list.isEmpty())return -1

    var num = list[0]

    list.forEach {
        if (compare(num,it)){
            num = it
        }
    }

    return num
}

fun main() {

   val list = arrayOf(8,6,1,9,2)

    val minNum = min(list){num1, num2 ->
        num1 > num2
    }

    println(minNum)
}

输出结果:1

上边的min方法的代码相当于:

fun min(list:Array<Int>,compare:(num1:Int,num2:Int)->Boolean):Int{
   ...
}

Import as

实际上import as 和 typealias基本是一个东西,但是配合理解可以更简单

import android.support.v4.app.NotificationCompat.Builder as NotificationBuilder

注:如果学过Python大概会觉得很亲切了,在类中的应用可以用NotificationBuilder替代android.support.v4.app.NotificationCompat.Builder

  • 更有效的用处
    import com.example.app.model.User
    import com.example.app.database.User as DatabaseUser
    
    当导入的两个类同名时,写代码时候往往很难区分,这时候就很好用了。

当然我们也可以改成:

import com.example.app.model.User
typealias DatabaseUser = com.example.app.database.User

什么时候只能用import as或是另一个

image.png