创建Kotlin对象的新实例
我有一个对象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
是由设计构成的。
这是一个很好的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,所以第二种方法也受到影响。