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

У меня есть объект 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
RxJava 2 требует другого типа возвращаемого типа, чем RxJava 1 (Kotlin) Как использовать Kotlin в проектах AppEngine с использованием Gradle java.lang.IllegalStateException Не уверен, что это с типом данных? как использовать @jvmoverloads с интерфейсом в Kotlin Дезертициализация поля, которое может быть одним из двух типов данных с использованием Moshi Как отфильтровать значение от arraylist в Kotlin Класс тестирования детей Kotlin запускает все родительские тесты Kotlin неразрешимая ссылка: добавить после преобразования из Java-кода (Неизвестный источник: 7) ошибка в kotlin android побитовое и не работает с байтами в котлин Шаблон Nullable var внутри строки Intellij Idea не будет компилировать kotlin, но maven делает Абонент RxJava2 PublishSubject не может получать элементы при вызове из нескольких потоков, используя SingleScheduler Intellij IDEA отладчик не работает над проектом Gradle Vert.X jackson-dataformat-csv не игнорирует неизвестные свойства