Как подсчитать количество объектов, созданных в Kotlin?

#kotlin

#kotlin

Вопрос:

В следующем фрагменте кода я создал 4 экземпляра CompanionClass и хочу знать, сколько экземпляров я создал, поэтому перепробовал много способов, но не сработало. Здесь я использовал класс сопутствующих объектов для отслеживания объектов, но я знаю, что он не имеет никакого отношения к объектам, потому что keepTrackOfObjects() является статическим. Кто-нибудь может помочь мне решить эту проблему, пожалуйста?

 class CompanionClass
{
     
    companion object{
        var numberOfObjects = 0 
        fun keepTrackOfObjects() = println("number of created objects currently is:  
             ${  numberOfObjects}")
    }
}

fun main()
{
 
    val obj1 = CompanionClass()
    CompanionClass.keepTrackOfObjects()
    val obj2 = CompanionClass()`enter code here`
    val obj3 = CompanionClass()
    val obj4 = CompanionClass()
    CompanionClass.keepTrackOfObjects()
}

// output is
// 1
// 2
  

Комментарии:

1. Создайте список объектов, тогда подсчитать их не составит труда ( kotlinlang.org/docs/reference/collections-overview.html )

2. где вы используете numberOfObjects в своем коде?

3. @Luuk мне не нужно создавать список объектов. Предположим, мне нужен один или два объекта, и я хочу знать, сколько объектов класса я создал. можете ли вы помочь мне без списков.

4. @hfarhanahmed внутри класса сопутствующих объектов.

5. Проблема в том, что сопутствующий объект { var numberOfObjects = 0 } запускается каждый раз при создании нового экземпляра. этот счетчик должен находиться в другом классе, чтобы сохранить предыдущее значение.

Ответ №1:

Вы можете использовать init блок для подсчета созданных вами элементов:

 class CompanionClass {
     
    companion object {
        var counter: Int = 0
        
        fun counter(): Int {
            return counter
        }
    }

    init {
        counter  
    }
}
  

Вы можете протестировать поведение на этой игровой площадке kotlin.

Комментарии:

1. Я попробовал ваш фрагмент кода и создал несколько объектов CompanionClass. Когда я печатаю CompanionClass.counter(), он выдает мне 0 в качестве выходных данных, и то же самое верно для obj.counter().

Ответ №2:

Проблема в вашем сопутствующем объекте,

 var numberOfObjects = 0 
  

будет инициализировать переменную каждый раз, когда вы создаете новый экземпляр. Итак, создайте эту переменную в отдельном классе, где храните все статическое содержимое, и используйте его оттуда. тогда ваш сопутствующий объект будет таким.

     companion object{
        fun keepTrackOfObjects() = println("number of created objects currently is:  
             ${  numberOfObjects}")
    }
  

Ответ №3:

Для достижения этого вам следует увеличить ваш numberOfObject в init инструкции.. Взгляните на приведенный ниже код

 class User (var firstName:String,var lastName:String){
    companion object {
        var numberofinstance:Int = 0
        fun getNumberOfInstance() = println("Nombre d'instance = $numberofinstance")
    }
    init {numberofinstance  }
}
  

Теперь вы можете использовать это в своей основной функции

 fun main(){
    val user1=User("bob","marley")
    val user2=User("bonkey","reynard")
    val user3=User("jobbs","steve")
    val user4=User("bill","naim")
    val user5=User("jeff","romain")

    User.getNumberOfInstance()
}
  

Вывод : Number of instance = 5

Комментарии:

1. Остерегайтесь этого подхода, и все остальные до сих пор, не являются потокобезопасными.