为什么 :: 语法在某些情况下不能调用 kotlin 函数?

Why :: syntax cannot call kotlin function in some cases?

试试这个代码:

fun foo(arr: IntArray): Boolean {
    arr.also(::sort)
}

IDEA告诉我需要导入sort函数,像这样:

import java.util.Arrays.sort

它调用这个:

public static void sort(int[] a) {
    DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}

但是应该直接使用kotlin函数,像这样:

fun bar(arr: IntArray): Boolean {
    arr.also { it.sort() }
}

它调用这个:

public actual fun IntArray.sort(): Unit {
    if (size > 1) java.util.Arrays.sort(this)
}

为什么在这种情况下 :: 语法不能调用 kotlin 函数?

因为::语法引用了顶层函数。如果你想引用 IntArray.sort() 你必须写 arr.also(IntArray::sort)

更新: 你也可以用::语法

调用this的方法