2つのインスタンスを作成しようとしているオブジェクトQuickSortがあります。 2つの別個のインスタンスを作成しようとすると、QuickSortクラスのカウントが不正確であるため、1つのインスタンスのみを使用していることがわかります。 Kotlinは、構文でnewを使用しません。これについてはどうすればよいでしょうか?
object QuickSort {
var count = 0;
quickSortOne(...){
...
count++
...
}
quickSortTwo(...){
...
count++
...
}
}
2つのインスタンスを作成する方法を次に示します。私の目標は、quickSort1およびquickSort22つの別個のインスタンスである。
var quickSort1 = QuickSort
quickSort1.quickSortOne(...)
var quickSort2 = QuickSort
quickSort2.quickSortTwo(...)
試行された解決策:QuickSortをオブジェクトからクラスに変換します。これにより、最初の呼び出しカウントを含む2番目のメソッドのカウントからわかるように、同じインスタンスが使用されます。
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))
私は自分の問題を理解しました。同じArrayListをquickSortOne()とquickSortTwo()の両方に渡していました。 ArrayListは最初のメソッドによって変更されていたため、2番目のメソッドも影響を受けていました。
object
は、シングルトンのコトリンバージョンです。これを使用することで、すべてのユーザーが共有するインスタンスが1つだけになるように指定します。
class
に変換すると、個別のインスタンスを作成できます。
アダム、あなたは全体のポイントを見逃しています:object
sは設計上は単音です。
これは、kotlinにコピーされた良好なscala featurasの1つです。
(JavaまたはC#では、normalいstatic
メンバーと通常のクラスメンバーが混在しています)。
あなたの質問に関して:
A.いいえ、Java/C#で2つの異なるobject
を使用することはできないため、kotlin/scalaの2つのインスタンスString
を作成することはできません。
B. object
をclass
で置き換えるだけです(そして本当にnew
が必要ですか?Pythonで見逃したことはありません)
Objectキーワードは1つのインスタンスのみを作成するため、必ずクラスを使用する必要があります。クラス内でコンパニオンオブジェクトを使用して、作成されたクラスのインスタンスの数を追跡できます。
こちらもあなたが試す例です here
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