Kotlin 类中的对象与伴生对象

Kotlin 类中的对象与伴生对象,kotlin,Kotlin,工厂和工厂2之间有什么不同? 他们似乎都做了同样的事 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 c

工厂
工厂2
之间有什么不同? 他们似乎都做了同样的事

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
    }
}
}
数据级汽车(val马力:Int){
伴星工厂{
val cars=mutableListOf()
趣味汽车(马力:Int):汽车{
val汽车=汽车(马力)
汽车。添加(汽车)
回程车
}
}
对象工厂2{
val cars=mutableListOf()
趣味汽车(马力:Int):汽车{
val汽车=汽车(马力)
汽车。添加(汽车)
回程车
}
}
}
伴随对象是一种特定类型的对象声明,它允许对象与其他语言(如Java)中的静态对象类似。向对象声明添加伴奏允许向对象添加“静态”功能,即使Kotlin中不存在实际的静态概念

伴随对象是一种特定类型的对象声明,它允许对象与其他语言(如Java)中的静态对象类似。向对象声明添加伴奏允许向对象添加“静态”功能,即使Kotlin中不存在实际的静态概念


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

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

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函数只能按如下方式调用

Car.Factory2.makeCar(50) // From outside the class
Factory2.makeCar(50)     // Inside the class

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

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

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函数只能按如下方式调用

Car.Factory2.makeCar(50) // From outside the class
Factory2.makeCar(50)     // Inside the class

kotlin中的对象是实现单例的一种方法

object MyObject {

// further implementation
  
  fun printHello() {
    println("Hello World!")
  }
  
}
这种实现也称为对象声明。对象声明是线程安全的,并且是延迟初始化的,即当对象第一次被访问时,对象被初始化

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

class MyClass {

  // some implementations
  
  companion object {
    val SOME_STATIC_VARIABLE = "STATIC_VARIABLE"
    fun someStaticFunction() {
      // static function implementation
    }
  }
}

kotlin中的对象是实现单例的一种方法

object MyObject {

// further implementation
  
  fun printHello() {
    println("Hello World!")
  }
  
}
这种实现也称为对象声明。对象声明是线程安全的,并且是延迟初始化的,即当对象第一次被访问时,对象被初始化

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

class MyClass {

  // some implementations
  
  companion object {
    val SOME_STATIC_VARIABLE = "STATIC_VARIABLE"
    fun someStaticFunction() {
      // static function implementation
    }
  }
}

可能的重复,但它不回答同伴对象相对于对象的优势是什么?可能的重复,但它不回答同伴对象相对于对象的优势是什么?