美文网首页
kotlin 内联类 value class

kotlin 内联类 value class

作者: 中路杀神ai | 来源:发表于2023-05-04 17:50 被阅读0次
    1. 通过关键词value+@JvmInline声明了一个内联类
    //内联类
    //1.4.30 修复了 init 代码块的限制,
    //1.5.0 由inline class => value + @jvmInline
    //1.8.20 修复了 二级构造的限制
    @JvmInline
    value class Person(private val fullName: String):PersonX {
        init {
            check(fullName.isNotBlank()) {
    
            }
        }
        constructor(name: String, lastName: String) : this("$name--$lastName") {
            check(lastName.isNotBlank()){
    
            }
        }
    }
    
    interface PersonX{
    
    }
    
    2. 内联类的限制

    内联类没有被当成其他类型使用
    若不满足这个条件,内联就会失败,此时会发生装箱,内联类被当成一个包装类被构建

    • 普通类具备的功能,内联类几乎都具备:
      成员变量/方法 & 实现接口
    • 内联类在保证类型安全的同时能做到了零性能损耗
    3.它通常用于约束语义,并以零性能损耗的方式通过编译器保证类型安全
    /**
     *
     * @param second 秒
     */
    fun printTime(second:Second){
       println("当前输入秒 :$second")
    }
    /**
     *
     * @param minute 分钟
     */
    fun printTime(minute:Minute){
        println("当前输入分钟 :$minute")
    }
    
    
    @JvmInline
    value class Second(val second: Long)
    
    
    data class Minute(val minute: Long)
    
    fun main(){
      // 当 kotlin 编译成 java 后,内联类型不会被创建,而是将其成员内联到调用处
       printTime(Second(1))
      // 构建新的包装对象(在堆中分配内存,并在栈中指向这块内存)
       printTime(Minute(1))
    }
    
    image.png

    相关文章

      网友评论

          本文标题:kotlin 内联类 value class

          本文链接:https://www.haomeiwen.com/subject/lwgxsdtx.html