如何创建包级功能?

Ber*_*rry 11 function kotlin

我正在阅读Kotlin参考指南,其中一部分说:

在Kotlin中,与Java或C#不同,类没有静态方法.在大多数情况下,建议只使用包级功能.

如何创建包级功能?

Rya*_*ert 16

来自参考:

源文件的所有内容(如类和函数)都包含在声明的包中.

所以只需创建一个像这样的源文件:

package my.pkg

fun f0()=0
fun f1()=1
Run Code Online (Sandbox Code Playgroud)

我们可以声明命名的函数f0f1直接对my.pkg包可见.然后可以导入这些函数并使用类似于类:

import my.pkg.f0
import my.pkg.f1
Run Code Online (Sandbox Code Playgroud)

或者,使用*语法:

import my.pkg.*
Run Code Online (Sandbox Code Playgroud)


Yog*_*ity 8

包级函数

包级函数也称为顶级函数。它们直接在文件内声明,无需为它们创建任何类。它们通常是独立于任何类的实用函数:

UserUtils.kt

package com.app.user

fun getAllUsers() { }

fun getProfileFor(userId: String) { }
Run Code Online (Sandbox Code Playgroud)

用法:

import com.app.user.getProfileFor

val userProfile = getProfileFor("34")
Run Code Online (Sandbox Code Playgroud)

您不需要手动编写import语句,只需键入函数名称,自动导入就会完成它的工作。


带有类的包级函数

当函数与类有些相关时,将它们定义在同一文件中的类之上:

用户.kt

package com.app.user   

fun getAllUsers() { }

fun getProfileFor(userId: String) { }

data class User(val id: String, val name: String)
Run Code Online (Sandbox Code Playgroud)

用法:

import com.app.user.getAllUsers

val userList = getAllUsers()
Run Code Online (Sandbox Code Playgroud)

companion object

当函数与类密切相关时,将它们定义在 a 中companion object

用户.kt

data class User(val id: String, val name: String) {

    companion object {

        fun getAll() { }

        fun profileFor(userId: String) { }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

import com.app.user.User

val userProfile = User.profileFor("34")
Run Code Online (Sandbox Code Playgroud)

就是这样!