Kotlin的对象表达式(Object expressions)

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

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

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

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

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

匿名对象作为函数返回值和值类型
匿名对象可以用作函数返回类型。为了能够访问其成员,函数应该是局部的或者 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"
}

如果是 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"
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值