Kotlin inline & noinline & crossinline

inline & noinline & crossinline

inline

  • Kotlin对函数进行内联的支持
  • inline可以让你使用内联,即将函数内容直插到调用处,优化代码结构,减少函数类型的对象的创建

普通调用

fun main() {
    
    
    hello {
    
    
        println("world")
    }
}

fun hello(block: () -> Unit) {
    
    
    println("hello")
    block()
}

//hello
//world

inline调用

fun main() {
    
    
    hello {
    
    
        println("world")
    }
}

inline fun hello(block: () -> Unit) {
    
    
    println("hello")
    block()
}

//hello
//world

编译后等价于

fun main() {
    
    
    println("hello")
    println("world")
}

noinline

  • noinline是局部关闭内联优化
fun main() {
    
    
    hello {
    
    
        println("world")
    }
}

inline fun hello(noinline block: () -> Unit) {
    
    
    println("hello")
    block()
}

编译后等价于

fun main() {
    
    
    println("hello")
    ({
    
    
        println("world")
    }).invoke()
}

crossinline

  • 局部加强内联优化
  • 被crossinline修饰的lambda参数,不能使用return

不使用crossinline

fun main() {
    
    
    println("1")
    hello {
    
    
        println("world")
        return
    }
    println("2")
}

inline fun hello(block: () -> Unit) {
    
    
    println("hello")
    block()
}

//1
//hello
//world

编译后等价于

fun main() {
    
    
    println("1")
    println("hello")
    println("world")
    return
    println("2")
}

使用crossinline

fun main() {
    
    
    println("1")
    hello {
    
    
        println("world")
    }
    println("2")
}

inline fun hello(crossinline block: () -> Unit) {
    
    
    println("hello")
    block()
}

おすすめ

転載: blog.csdn.net/qq_14876133/article/details/118442523