【发布时间】:2017-11-01 00:09:01
【问题描述】:
我有一个对象 QuickSort,我正在尝试创建 2 个实例。当我尝试创建 2 个单独的实例时,我可以看到它只使用一个实例,因为我在 QuickSort 类中有一个不准确的计数。 Kotlin 没有在语法中使用 new,那我该怎么做呢?
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))
【问题讨论】:
-
亚当,我想你是在开玩笑!为什么要创建
companion object?它的目的是:Note that, even though the members of companion objects look like static members in other languages, at runtime those are still instance members of real objects,... -
移除伴生对象,让你的方法成为类的普通成员。
-
谢谢@Ingaz!我删除了
companion object{}并完全按照上面的实现方式更新了我的代码。它仍在使用相同的 QuickSort() 实例。 -
恭喜! Kotlin 是一门很棒的语言,既实用又不丑陋。另外,我仍然无法理解您试图完成的工作。 Kotlin 有在线游乐场:try.kotlinlang.org/#/UserProjects/9ck28rcs1gco73cerr7ql2hi2g/…
-
My goal is to have quickSort1 and quickSort2 be 2 separate instances.您尝试的解决方案就是这样做的。完整的代码会很有帮助,有很多可疑的地方。 (quickSortFirst方法突然从哪里来的?quickSortOne是一个函数吗?他们都在同一个数组列表上操作,可以吗?)
标签: kotlin kotlin-android-extensions kotlin-extension rx-kotlin