【发布时间】:2016-12-11 06:11:46
【问题描述】:
我正在阅读the Kotlin Reference Guide,其中一部分说:
在 Kotlin 中,与 Java 或 C# 不同,类没有静态方法。在大多数情况下,建议只使用包级函数。
如何创建包级函数?
【问题讨论】:
我正在阅读the Kotlin Reference Guide,其中一部分说:
在 Kotlin 中,与 Java 或 C# 不同,类没有静态方法。在大多数情况下,建议只使用包级函数。
如何创建包级函数?
【问题讨论】:
包级函数也称为顶级函数。它们直接在文件中声明,而不为它们创建任何类。它们通常是独立于任何类的实用函数:
UserUtils.kt
package com.app.user
fun getAllUsers() { }
fun getProfileFor(userId: String) { }
用法:
import com.app.user.getProfileFor
val userProfile = getProfileFor("34")
您无需手动编写import 语句,只需键入函数名称,自动导入即可完成工作。
当函数与某个类有些相关时,将它们定义在类的上方,在同一个文件中:
User.kt
package com.app.user
fun getAllUsers() { }
fun getProfileFor(userId: String) { }
data class User(val id: String, val name: String)
用法:
import com.app.user.getAllUsers
val userList = getAllUsers()
companion object当函数与类密切相关时,在companion object 中定义它们:
User.kt
data class User(val id: String, val name: String) {
companion object {
fun getAll() { }
fun profileFor(userId: String) { }
}
}
用法:
import com.app.user.User
val userProfile = User.profileFor("34")
就是这样!
【讨论】:
源文件的所有内容(例如类和函数)都包含在声明的包中。
所以只需像这样创建一个源文件:
package my.pkg
fun f0()=0
fun f1()=1
我们可以声明名为f0 和f1 的函数对my.pkg 包直接可见。然后可以像类一样导入和使用这些函数:
import my.pkg.f0
import my.pkg.f1
或者,使用* 语法:
import my.pkg.*
【讨论】:
kotlinc main.kt -include-runtime -d main.jar && java -jar main.jar 运行相同的代码,我会收到 unresolved reference 错误。