创建Kotlin对象的新实例

我有一个对象QuickSort ,我试图创建2个实例。 当我尝试创建2个单独的实例时,我可以看到它只使用一个实例,因为我在QuickSort类中有一个不准确的计数。 Kotlin在语法上不使用的,所以我怎么去解决这个问题呢?

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

这里是我如何创建我的2个实例。我的目标是让quickSort1quickSort2是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是由设计构成的。

这是一个很好的scala featuras复制到kotlin。

(在Java或C#中,你有丑陋的static成员与普通的类成员混合)。

至于你的问题:

答:不可以,因为在Java / C#中不能有两个不同的String ,所以不能创建两个kotlin / scala object

B.只要用class替换object (你真的需要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,所以第二种方法也受到影响。