Создать новый экземпляр объекта Котлин

У меня есть объект QuickSort, который я пытаюсь создать 2 экземпляра. Когда я пытаюсь создать 2 отдельных экземпляра, я вижу, что он использует только один экземпляр, потому что у меня есть счет в классе QuickSort, который является неточным. Kotlin не использует новые в синтаксисе, так как я могу это сделать?

object QuickSort { var count = 0; quickSortOne(...){ ... count++ ... } quickSortTwo(...){ ... count++ ... } } 

Вот как я пытаюсь создать свои 2 экземпляра. Моя цель состоит в том, чтобы quickSort1 и quickSort2 были 2 отдельными экземплярами.

 var quickSort1 = QuickSort quickSort1.quickSortOne(...) var quickSort2 = QuickSort quickSort2.quickSortTwo(...) 

Попытка Решение : Преобразование QuickSort из объекта в класс. Это по-прежнему приводит к тому, что тот же экземпляр используется, как видно из подсчета второго метода, включая первый счет вызовов.

 class QuickSort { var count = 0; quickSortOne(...){ ... count++ ... } quickSortTwo(...){ ... count++ ... } } 

 var quickSortFirst = QuickSort() printTest(quickSortFirst.quickSortFirst(arrayList, 0, arrayList.size - 1)) var quickSortLast = QuickSort() printTest(quickSortLast.quickSortLast(arrayList, 0, arrayList.size - 1)) 

object – это однолинейная версия kotlin. Используя его, вы указываете, что будет только один экземпляр, который будет использоваться всеми его пользователями.

Превратите его в class и вы сможете создавать отдельные экземпляры.

Адам, вы пропустите весь смысл: object s – это синглеты по дизайну.

Это одна из хороших scala featuras, скопированных в kotlin.

(В java или C # у вас есть уродливые static члены, смешанные с обычными членами класса).

Что касается вашего вопроса:

О. Нет, вы не можете создать два объекта объекта kotlin / scala, поскольку у вас не может быть двух разных String в Java / C #.

B. Просто замените object class (и вам действительно нужен new ? Я никогда не пропустил его в python)

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

Вот пример, который вы также можете попробовать здесь

 data class QuickSort(val objectName: String) { init { count++ } companion object { var count = 0 fun printCount() = println("count = $count") } } fun main(args: Array<String>) { QuickSort.printCount() val quickSort1 = QuickSort("qs1") QuickSort.printCount() val quickSort2 = QuickSort("qs2") QuickSort.printCount() // just to prove you have two instances. println(quickSort1) println(quickSort2) println("quickSort1 hashcode = ${quickSort1.hashCode()}, quickSort2 hashcode = ${quickSort2.hashCode()}") } 

который производит:

 count = 0 count = 1 count = 2 QuickSort(objectName=qs1) QuickSort(objectName=qs2) quickSort1 hashcode = 112207, quickSort2 hashcode = 112208 

Я понял свою проблему. Я проходил в том же массиве ArrayList как для quickSortOne (), так и для quickSortTwo (). Поскольку ArrayList был модифицирован первым методом, второй эффект также был затронут.

Intereting Posts
Kotlin: Как получить доступ к методам get и setValue для делегата? Сделать общий переход элемента между фрагментом и диалогом Невозможно создать новый проект, используя генератор-генератор Gradle + Kotlin Класс не найден, пустой набор тестов в androidTest с использованием Android Studio 3.0.1, Room, Kotlin Как показать голландский месяц с использованием Joda DateTime Свойства делегата Kotlin, реализующие функцию оператора «предоставлятьDelegate», но метод никогда не вызывал Поддержка Koitlin для статической метамодели JPA Kotlin для Android. Тост Kotlin: ArrayIndexOutOfBoundsException при преобразовании DispatchTask в строку Как использовать `filter` на экземпляре карты в Kotlin? Пользовательский полу-обобщенный Factory для ViewModels Возвращаемое значение условия if / else, но также запускает код Пример использования Kotlin foreachblock Нельзя издеваться над финальным классом Kotlin, используя Mockito 2 Kotlin не может идентифицировать параметры, если явно не указано