文学创作中华文学Android开发

Kotlin中的inline关键字 - 内联类

2021-06-01  本文已影响0人  盛世光阴

版权归作者所有,转发请注明出处:https://www.jianshu.com/p/fe7ed9b790f8

Kotlin中的inline关键字 - 内联函数
Kotlin中的inline关键字 - 内联类

前言

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言

img.jpg

内联函数

inline关键字所修饰的类为内联类

内联函数的作用

Kotlin中的inline关键字 - 内联函数 中我们了解到内联函数的额作用是节省函数调用的开销,那么内联类的作用就是节省类创建对象的开销,很多时候我们的类只会有一个属性,整个类中提供的都是获取操作此属性的办法,通常情况下我们会这样

inline class CurrentStatus(val value: String) {

    fun getStatus() = when (value) {
        "Waiting " -> {
            0
        }
        "inProgress" -> {
            1
        }
        "complete" -> {
            2
        }
        else -> {
            -1
        }
    }

}

fun use(){
    val status = CurrentStatus("complete")
    print(status.getStatus())
}

内联类就会生成类似于这样的代码

class CurrentStatus{

    private final String value;

    public static int getStatus_Impl(String value){
        ...
    }
}


fun use(){
    val status = "complete" //没有进行对象的创建,只是存在被包装的值
    print(CurrentStatus.getStatus_Impl(status)) //编译器生成类似的静态函数
}

整个调用过程没有堆对象的产生,节省了对象创建的消耗

使用内联类的条件

内联类必须要有一个主构造函数,并且目前的支持必须有一个val属性

inline class CurrentStatus() {} //错误
inline class CurrentStatus(var value:String ) {} //错误
inline class CurrentStatus(var value:String,val data:String) {} //错误
inline class CurrentStatus(val value:String) {} //正确

使用内联类定义严格的类型别名

kotlin中可以使用typealias定义类型别名

typealias Amount = Double
typealias Percent = Double

fun test() {
    var amount: Amount = 0.1
    val percent: Percent = 0.15
    amount = percent // 可以正常赋值,因为虽然是不同的typealias,但是实际类型是相同的
}

也可以使用内联类进行包装

inline class Amount(val value: Double)
inline class Percent(val value: Double)

fun test() {
    var amount: Amount = Amount(0.1)
    val percent: Percent = Percent(0.2)
    amount = percent // 编译错误,类型不同
}

欢迎关注Mike的简书

Android 知识整理

上一篇 下一篇

猜你喜欢

热点阅读