在下面的例子中,我有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
}
答案 0 :(得分:4)
size
是List
接口上的属性,而不是函数。这就是为什么你可以(不得不)在没有括号的情况下访问它的原因。
Kotlin使用一些编译器魔法来map其own collection types到JVM类型。由于某种原因,他们决定将size集合作为属性公开,每次在Kotlin中使用集合时,即使它们的底层实现是像java.util.ArrayList
这样的类,也可以通过定义的接口看到它们作者:Kotlin。