为什么我有时可以在Kotlin中省略函数调用?

时间:2018-01-29 13:40:06

标签: function kotlin function-calls

在下面的例子中,我有2个函数,返回int。在一种情况下,我不得不使用函数调用括号(),在其他情况下我被禁止使用它。

为什么以及如何控制?

package kotlin.tests

import java.util.ArrayList

object MyObject {
    fun getValue(): Int {
        return 0
    }
}


fun main() {

    val arrayList : ArrayList<Any> = ArrayList()

    println(arrayList.size())
    // Expression 'size' of type 'Int' cannot be invoked as a function. The function 'invoke()' is not found

    println(MyObject.getValue)
    // Function invocation 'getValue()' expected

}

1 个答案:

答案 0 :(得分:4)

sizeList接口上的属性,而不是函数。这就是为什么你可以(不得不)在没有括号的情况下访问它的原因。

Kotlin使用一些编译器魔法来mapown collection types到JVM类型。由于某种原因,他们决定将size集合作为属性公开,每次在Kotlin中使用集合时,即使它们的底层实现是像java.util.ArrayList这样的类,也可以通过定义的接口看到它们作者:Kotlin。