Android面试题之Kotlin中的object关键字和companion伴生对象

深入理解Java中的单例类、对象表达式、伴生对象与内部方法

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

object
  • 单例类对象
object ObjectTest {
    init {
        println("loading application...")
    }
    fun doSomething() {
        println("doSomething")
    }
}

fun main() {
    //类名,实例名
    ObjectTest.doSomething()
}
  • 修饰对象表达式
open class SingleTest {
    open fun play() = "loading..."
}
fun main() {
    val p = object : SingleTest(){
        override fun play() = "other loading..."
    }
    println(p.play())
}
companion伴生对象
  • 将某个对象的初始化和一个类实例捆绑在一起

  • 一个类里只能有一个伴生对象

  • 伴生对象只有一个,哪怕类初始化多次

  • 只有在类实例化或是调用伴生对象的函数时,伴生对象才会初始化,才会加载到内存

  • 伴生对象里的方法就类似Java里的static方法的实现

//伴生对象
open class ConfigMap{
    companion object{
        private const val PA
### Kotlinobject 关键字的作用用法 Kotlin 中的 `object` 关键字主要用于定义单例对象、匿名对象以及伴生对象,这三种使用方式各有其特定的场景功能。 #### 1. 单例对象 通过 `object` 关键字可以直接定义一个全局唯一的单例对象。这种方式可以替代 Java 中的静态类或静态方法[^2]。 示例如下: ```kotlin object Singleton { val name: String = "我是单例对象" fun sayHello() { println("Hello from $name") } } fun main() { Singleton.sayHello() // 调用单例对象的方法 } ``` 在上述代码中,`Singleton` 是一个全局唯一的单例对象,可以通过直接调用其属性或方法来使用它。 #### 2. 匿名对象 `object` 关键字还可以用来创建匿名对象,这种对象通常用于需要临时实现某个接口或继承某个类的场景。匿名对象的特点是它的生命周期较短,且只能有一个实例存在[^5]。 示例如下: ```kotlin fun createAnonymousObject(): Any { return object { val message: String = "我是匿名对象" fun greet() { println(message) } } } fun main() { val anonymous = createAnonymousObject() (anonymous as dynamic).greet() // 调用匿名对象的方法 } ``` #### 3. 伴生对象 伴生对象Kotlin 中一种特殊的对象声明,通常用于替代 Java 中的 `static` 关键字。通过在类内部定义一个由 `companion` 修饰的 `object`,可以实现类似于静态成员的功能[^3]。 示例如下: ```kotlin class MyClass { companion object { const val CONSTANT: String = "我是伴生对象的常量" fun utilityFunction() { println("这是伴生对象中的方法") } } } fun main() { println(MyClass.CONSTANT) // 访问伴生对象的常量 MyClass.utilityFunction() // 调用伴生对象的方法 } ``` 需要注意的是,当从 Java 中访问 Kotlin伴生对象时,如果没有添加 `@JvmStatic` 注解,则必须通过 `.Companion` 显式调用[^4]。 --- ### 总结 `object` 关键字Kotlin 中具有多种用途,包括定义单例对象、匿名对象以及伴生对象。每种用途都有其独特的应用场景语法特点。通过合理使用 `object` 关键字,可以简化代码结构并提高代码的可读性可维护性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值