• Kotlin的对象表达式(Object expressions)


    在这里插入图片描述
    什么是对象表达式?(Object expressions)

    对象表达式用来创建匿名类的对象。匿名类是指没有使用 class 关键字显式声明的类。匿名类只能使用一次。你可以从已有类继承、拼接或者实现接口来定义一个匿名类。匿名类的实例也被称为匿名对象,因为匿名对象是由一个表达式而不是一个变量名声明的。

    创建匿名对象
    使用 object 关键字来创建匿名对象:

    val user = object {
        val firstName = "John"
        val lastName = "Dev"
    // 对象表达式继承自Any 类型,所以需要覆写 `toString()` 函数
        override fun toString() = "$firstName $lastName"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    匿名对象的成员可以用使用 . 点操作符访问。

    匿名对象作为函数返回值和值类型
    匿名对象可以用作函数返回类型。为了能够访问其成员,函数应该是局部的或者 private类型的(但不能是 inline 类型)

    private fun user() = object {
        val firstName = "John"
        val lastName = "Dev"
        // object expressions extend Any, so `override` is required on `toString()`
        override fun toString() = "$firstName $lastName"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果是 publicprivate 类型的 inline 函数或者属性,返回类就变成:

    • Any 。如果没有声明父类型的话
    • 声明的父类型。只有一个父类型
    • 显式声明的类型。有多个父类型
    class Demo{
        // 返回类型是 Any,无法访问firstName 
        fun getName() = object {
            val firstName:String = "John"
        }
    
        // 返回类型是 User. 无法访问firstName 
        fun getUser() = object : User{
            override fun getId() {}
            val firstName:String = "John"
        }
    
        // 返回类型是 Address; 无法访问firstName 和 getId() 
        fun getAddress():Address = object : User, Address{
            // explicit return type is required
            override fun getId() {}
            val firstName:String = "John"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    原文链接:https://mangeshyadav786.medium.com/object-expressions-in-kotlin-a6bfb5ad323a

  • 相关阅读:
    Linux基础篇(6)---》常用命令大全(网络命令+关机重启命令)
    Go 快速起步:创建 WebSocket 服务器(聊天室)
    Spring framework day 02:Spring 整合 Mybatis
    1.3 矩阵
    计算机组成原理-流水线技术学习笔记1
    力扣每日一题每天自动邮件提醒
    一道简单的积分题目
    CTFhub-RCE-远程包含
    STM32 TIM(四)编码器接口
    面试突击:MVCC 和间隙锁有什么区别?
  • 原文地址:https://blog.csdn.net/mg2flyingff/article/details/125567299