首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类中对象与伴生对象

类中对象与伴生对象
EN

Stack Overflow用户
提问于 2019-02-06 14:24:39
回答 3查看 1.1K关注 0票数 0

FactoryFactory2有什么不同?他们似乎都在做同样的事情。

代码语言:javascript
运行
复制
data class Car(val horsepowers: Int) {
companion object Factory {
    val cars = mutableListOf<Car>()

    fun makeCar(horsepowers: Int): Car {
        val car = Car(horsepowers)
        cars.add(car)
        return car
    }
}
object Factory2 {
    val cars = mutableListOf<Car>()
    fun makeCar(horsepowers: Int): Car {
        val car = Car(horsepowers)
        cars.add(car)
        return car
    }
}
}
EN

回答 3

Stack Overflow用户

发布于 2019-02-06 14:39:57

伴生对象是一种特定类型的对象声明,它允许对象的行为类似于其他语言(如

)中的静态对象。在对象声明中添加伴奏允许向对象添加“静态”功能,即使实际的静态概念在Kotlin中并不存在。

票数 2
EN

Stack Overflow用户

发布于 2019-12-14 02:39:23

在伴生对象中声明的属性和函数可以通过使用类名直接访问,就像我们访问java中的静态成员一样。

因此,在您的代码中,可以通过以下两种方式调用工厂的makeCar函数

代码语言:javascript
运行
复制
Car.makeCar(50)         // From outside the class
Car.Factory.makeCar(50) // From outside the class
makeCar(50)             // From inside the class
Factory.makeCar(50)     // From insie the class

另一方面,Factory2的makeCar函数只能按如下方式调用。

代码语言:javascript
运行
复制
Car.Factory2.makeCar(50) // From outside the class
Factory2.makeCar(50)     // Inside the class
票数 0
EN

Stack Overflow用户

发布于 2021-03-07 20:50:07

kotlin中的Object是实现单例的一种方式。

代码语言:javascript
运行
复制
object MyObject {

// further implementation
  
  fun printHello() {
    println("Hello World!")
  }
  
}

此实现也称为对象声明。对象声明是线程安全的,并且是延迟初始化的,也就是说,当对象第一次被访问时,它们是初始化的

伴生对象如果我们想让一些实现成为一个类,但又想要将一些行为公开为静态行为,那么伴生对象就可以使用了。这些是类中的对象声明。这些伴随对象在解析包含类时初始化,类似于java世界中的静态方法和变量。

代码语言:javascript
运行
复制
class MyClass {

  // some implementations
  
  companion object {
    val SOME_STATIC_VARIABLE = "STATIC_VARIABLE"
    fun someStaticFunction() {
      // static function implementation
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54547762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档