在 Android 应用程序中的何处声明 Kotlin 扩展函数

Where to declare Kotlin extension functions in an Android app

假设我有以下代码,我想将其作为可重复使用的组件:

fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this' corresponds to the list
    this[index1] = this[index2]
    this[index2] = tmp
}

我想在我的应用中的任何地方使用它,如下所示:

val l = mutableListOf(1, 2, 3)
l.swap(0, 2)

如果我错了请纠正我,但我相信函数扩展声明可以存在于 class 之外。所以在 Android 应用程序中,我应该把这个声明放在哪里?或者它甚至重要吗?编译是否只编译代码,而不管扩展在哪里声明并使其在全球范围内可重用,还是我必须使其成为 class 的一部分?

年,扩展函数可以在任何地方声明。

对于通用实用程序的功能(关于列表),我应该将它们放在 /company/app/util/lists.kt.

之类的下面

您可以创建一些文件,例如ListExt.kt 任何你想要的地方(例如在包 main_package_name/util/ListExt.kt 中)并将扩展函数放在那里,它将在整个项目中可用。所以ListExt.kt文件的内容可以是:

package main_package_name.util

fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this' corresponds to the list
    this[index1] = this[index2]
    this[index2] = tmp
}

// other extension functions on the Lists

它们可以在任何地方,但在同一个文件 and/or 包中为特定 class 扩展似乎是有意义的。例如,String 的扩展可以在 StringExtensions.kt 中,并且可以选择在扩展包中。

要使扩展成为全局扩展,您需要将其放在 class

之外
package com.extension.globalcontext

fun <T> MutableList<T>.swap(index1: Int, index2: Int)

要调用它们,您需要导入包

import com.extension.globalcontext
l.swap(0, 2)